JSch SFTP کنکشن کی ناکامیوں کو سمجھنا اور ان کا ازالہ کرنا
جاوا میں ایس ایف ٹی پی سرور سے جڑنا سیدھا ہوسکتا ہے، لیکن غلطیاں جیسے "الگورتھم مذاکرات ناکام"غیر متوقع چیلنجز لا سکتے ہیں۔ 🛠 یہ مسئلہ اکثر JSch لائبریری کے ساتھ ہینڈ شیک کے دوران پیدا ہوتا ہے، جہاں کلائنٹ اور سرور کے درمیان انکرپشن الگورتھم کا تبادلہ ہوتا ہے۔
محفوظ فائل کی منتقلی کے لیے JSch پر انحصار کرنے والے ڈویلپرز کے لیے، اس طرح کے مسئلے کا سامنا کرنا مایوس کن محسوس کر سکتا ہے، خاص طور پر جب معیاری کنفیگریشنز سیدھ میں نہیں آتیں۔ غلطی عام طور پر اس وقت ہوتی ہے جب کلائنٹ (JSch) اور سرور کے درمیان خفیہ کاری یا کلیدی تبادلہ الگورتھم میں مماثلت نہ ہو۔
یہ خاص خرابی ایک حقیقی رکاوٹ بن سکتی ہے جب مختلف معاون الگورتھم چل رہے ہوں، جیسا کہ سرور کی SSH کنفیگریشن اور JSch کی ڈیفالٹ سیٹنگز کے ساتھ دیکھا جاتا ہے۔ سرور کی الگورتھم کی ترجیحات کو سمجھنا اور JSch کلائنٹ کو میچ کرنے کے لیے ترتیب دینا اکثر اس مسئلے کو حل کرنے کی کلید ہے۔
اس گائیڈ میں، ہم اس کے ذریعے چلیں گے کہ یہ کیوں"الگورتھم مذاکرات ناکام"خرابی ہو جاتی ہے اور ہموار کنکشن قائم کرنے کے لیے اپنے JSch سیٹ اپ کو حل کرنے اور کنفیگر کرنے کے لیے کچھ عملی اقدامات کا اشتراک کریں۔ آئیے اس میں غوطہ لگائیں اور اس کنکشن کو کام کریں! 🚀
حکم | استعمال کی مثال |
---|---|
jsch.getSession(username, host, port) | مخصوص کے لیے ایک SSH سیشن بناتا ہے۔ صارف نام، میزبان، اور بندرگاہ. یہ طریقہ ابھی تک جڑے بغیر کنکشن کو شروع کرتا ہے، سیشن قائم کرنے سے پہلے کنفیگریشن کی خصوصیات کو سیٹ کرنے کی اجازت دیتا ہے۔ |
session.setPassword(password) | تصدیق کو فعال کرنے کے لیے سیشن کے لیے SSH پاس ورڈ سیٹ کرتا ہے۔ یہ اس وقت درکار ہوتا ہے جب سرور نجی/عوامی کلید کی توثیق کا استعمال نہیں کرتا ہے۔ |
Properties config = new Properties() | شروع کرتا ہے a پراپرٹیز کنفیگریشن ویلیوز رکھنے کے لیے اعتراض۔ یہ آبجیکٹ سیشن کے لیے حسب ضرورت سیٹنگز کو اسٹور کرتا ہے، جیسے کلیدی تبادلہ یا سائفر الگورتھم، مخصوص سرور کنفیگریشنز کے ساتھ مطابقت کو بڑھاتا ہے۔ |
config.put("kex", "diffie-hellman-group14-sha1") | ترجیحی کلیدی تبادلہ الگورتھم سیٹ کرتا ہے۔ diffie-hellman-group14-sha1، جو عام طور پر پرانے SSH سرورز کے ذریعہ تعاون یافتہ ہے۔ یہ ترتیب اس بات کو یقینی بناتی ہے کہ کلائنٹ سرور کے ساتھ قابل قبول الگورتھم پر گفت و شنید کر سکتا ہے۔ |
config.put("cipher.s2c", "aes128-cbc,aes128-ctr") | سرور سے کلائنٹ (s2c) تک خفیہ کاری کے لیے سائفر الگورتھم کی وضاحت کرتا ہے۔ یہ حسب ضرورت ترتیب سرور کی ضروریات کو پورا کرنے کے لیے ضروری ہے جب سرور ڈیفالٹ JSch الگورتھم کو سپورٹ نہیں کرتا ہے۔ |
session.setConfig(config) | لاگو ہوتا ہے۔ پراپرٹیز SSH سیشن کی ترتیب۔ یہ JSch کو غیر طے شدہ الگورتھم استعمال کرنے کی اجازت دیتا ہے جیسا کہ مخصوص کیا گیا ہے، پرانے یا محدود سرورز کے ساتھ مطابقت کے مسائل کو حل کرنا۔ |
session.connect() | مخصوص کنفیگریشن اور اسناد کا استعمال کرتے ہوئے SSH سرور سے کنکشن شروع کرتا ہے۔ یہ طریقہ فراہم کردہ حسب ضرورت ترتیبات کی بنیاد پر الگورتھم گفت و شنید کرتے ہوئے سیشن شروع کرتا ہے۔ |
e.printStackTrace() | کسی بھی استثناء کا سامنا کرنے کے لئے کنسول پر اسٹیک ٹریس کو آؤٹ پٹ کرتا ہے۔ یہ کنکشن کے مسائل کو ڈیبگ کرنے کے لیے مفید ہے، کیونکہ یہ کنکشن کی کوشش کے دوران غلطیوں کے بارے میں تفصیلی معلومات فراہم کرتا ہے۔ |
assertTrue(service.connect()) | ٹیسٹ کرتا ہے کہ کنکشن کامیابی سے قائم ہو گیا ہے۔ یونٹ ٹیسٹ میں، اصرار سچ اس بات کو یقینی بناتا ہے کہ طریقہ واپس آتا ہے سچکنکشن کنفیگریشن کی توثیق کر رہا ہے۔ |
JSch SFTP کنکشنز کے لیے مطابقت کی اصلاحات کو نافذ کرنا
اوپر دیے گئے اسکرپٹ جاوا کی JSch لائبریری میں ایک مخصوص مسئلے کو حل کرنے کے لیے تیار کیے گئے ہیں، جو اکثر SFTP کے ذریعے محفوظ فائل ٹرانسفر کے لیے استعمال ہوتی ہے۔ جب غلطی "الگورتھم گفت و شنید ناکام" ہوتی ہے، تو اس کا عام طور پر مطلب ہوتا ہے کہ کلائنٹ (JSch) اور سرور کے درمیان معاون انکرپشن یا کلیدی تبادلہ الگورتھم میں مماثلت نہیں ہے۔ اس صورت میں، سرور پرانے الگورتھم کی حمایت کرتا ہے جیسے diffie-hellman-group14-sha1 یا aes128-cbcجب کہ JSch لائبریری زیادہ جدید اور محفوظ الگورتھم کے لیے ڈیفالٹ ہے۔ اسکرپٹ کلائنٹ کی ترتیبات کو سرور کی معاون کنفیگریشنز سے مماثل بنا کر کام کرتی ہیں، جس سے SSH سیشن کو الگورتھم گفت و شنید کو کامیابی کے ساتھ مکمل کرنے اور کنکشن قائم کرنے کی اجازت ملتی ہے۔
اسکرپٹ میں بنیادی کمانڈز میں JSch سیشن کو ترتیب دینا اور پھر سیشن کی ترتیب کو اپنی مرضی کے مطابق بنانا شامل ہے تاکہ یہ بیان کیا جا سکے کہ کون سا الگورتھم استعمال کرنا ہے۔ مثال کے طور پر، پہلے حل میں، ہم نے الگورتھم کو واضح طور پر بیان کرنے کے لیے "kex" (کلیدی تبادلہ)، "cipher.s2c" (سرور سے کلائنٹ تک سائفر) اور "cipher.c2s" (کلائنٹ سے سرور تک سائفر) جیسی خصوصیات کا استعمال کیا۔ سرور کے ساتھ ہم آہنگ۔ یہ ان ماحول کے لیے بہت اہم ہے جہاں پہلے سے طے شدہ الگورتھم مطابقت نہیں رکھتے، اور یہ سرور کی طرف تبدیلیوں کی ضرورت کے بغیر کنکشن کی غلطیوں کو روکتا ہے۔ مثال کے طور پر، اگر آپ پروڈکشن ماحول میں ڈیٹا کی منتقلی کے لیے کسی میراثی سرور سے منسلک ہو رہے ہیں، تو JSch کے الگورتھم میں اس طرح ترمیم کرنا ہی اکثر سرور کو اپ گریڈ کیے بغیر واحد حل ہوتا ہے۔
ان اسکرپٹ کی ایک اور خصوصیت ان کی ماڈیولر ساخت ہے۔ حل 2 میں، ہم نے ایک SFTPService کلاس بنائی، جس میں کنکشن کی تفصیلات کو ایک ایسے طریقہ میں شامل کیا گیا جسے تمام پروجیکٹس میں دوبارہ استعمال کیا جا سکتا ہے۔ یہ ماڈیولریٹی نہ صرف کوڈ کو زیادہ قابل انتظام اور دوبارہ قابل استعمال بناتی ہے بلکہ اس کے ساتھ سیدھ میں بھی آتی ہے۔ بہترین طریقوں سافٹ ویئر ڈویلپمنٹ میں، جیسے کہ ترتیب کو عمل سے الگ کرنا۔ پرنٹ اسٹیک ٹریس آؤٹ پٹ کے ساتھ غلطی سے نمٹنے کی شمولیت ڈیبگنگ کے لیے ضروری ہے اور یہ فوری طور پر شناخت کرنے میں مدد کرتا ہے کہ کنکشن کی ناکامی کہاں ہوتی ہے، چاہے غلط کنفیگریشنز، نیٹ ورک کے مسائل، یا غیر مطابقت پذیر الگورتھم کی وجہ سے ہو۔
وشوسنییتا کو یقینی بنانے کے لیے، حل کے آخری حصے میں JUnit کا استعمال کرتے ہوئے یونٹ ٹیسٹ شامل ہیں، ایک ایسا فریم ورک جو کوڈ کے انفرادی ٹکڑوں کو جانچنے کی اجازت دیتا ہے۔ کے ساتھ مختلف کنفیگریشنز کی جانچ کرکے اصرار سچ اور assert False طریقوں سے، ہم تصدیق کر سکتے ہیں کہ کنکشن یا تو کامیاب ہوتا ہے یا کچھ شرائط کے تحت توقع کے مطابق ناکام ہو جاتا ہے۔ یہ نقطہ نظر خاص طور پر ایک سے زیادہ سرورز سے کنکشن کا انتظام کرنے والے ڈویلپرز کے لیے مددگار ہے، کیونکہ وہ ہر ترتیب کو تنہائی میں جانچ سکتے ہیں۔ حقیقی دنیا کے منظرناموں میں، جانچ اس بات کو یقینی بناتی ہے کہ حل مختلف سرور کے ماحول میں کام کرتا ہے، پیداوار میں ممکنہ ڈاؤن ٹائم کو روکتا ہے۔ ان ٹیسٹوں کو چلانے سے، حل SSH سرورز کی وسیع رینج سے منسلک ہونے کے لیے زیادہ مضبوط اور قابل اعتماد ہو جاتا ہے۔ 🚀
حل 1: JSch میں سائفر اور کلیدی تبادلہ الگورتھم کو ایڈجسٹ کرنا
الگورتھم کی ترتیبات کو اپنی مرضی کے مطابق کرنے کے لیے JSch لائبریری کا استعمال کرتے ہوئے جاوا بیک اینڈ اسکرپٹ
// Import necessary classes
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Properties;
// Define the SFTP connection class
public class SFTPConnection {
public static void main(String[] args) {
String host = "SERVER_NAME";
String username = "USERNAME";
String password = "PASSWORD";
int port = 22;
try {
// Initialize JSch session
JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port);
session.setPassword(password);
// Set preferred algorithms for compatibility
Properties config = new Properties();
config.put("kex", "diffie-hellman-group14-sha1");
config.put("cipher.s2c", "aes128-cbc,aes128-ctr");
config.put("cipher.c2s", "aes128-cbc,aes128-ctr");
config.put("CheckCiphers", "aes128-ctr");
session.setConfig(config);
// Establish the connection
session.connect();
System.out.println("Connected to " + host);
} catch (Exception e) {
e.printStackTrace();
}
}
}
حل 2: بہتر الگورتھم مطابقت کے ساتھ ماڈیولر SFTP کنکشن
جاوا بیک اینڈ اسکرپٹ دوبارہ استعمال کرنے اور غلطی سے نمٹنے کے لیے ماڈیولر ڈیزائن کا استعمال کرتے ہوئے
// Import required classes
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import java.util.Properties;
public class SFTPService {
private Session session;
private String host, username, password;
private int port;
public SFTPService(String host, String username, String password, int port) {
this.host = host;
this.username = username;
this.password = password;
this.port = port;
}
public boolean connect() {
try {
JSch jsch = new JSch();
session = jsch.getSession(username, host, port);
session.setPassword(password);
Properties config = new Properties();
config.put("kex", "diffie-hellman-group14-sha1");
config.put("cipher.s2c", "aes128-ctr");
config.put("cipher.c2s", "aes128-ctr");
session.setConfig(config);
session.connect();
System.out.println("Connection established!");
return true;
} catch (JSchException e) {
e.printStackTrace();
return false;
}
}
}
یونٹ ٹیسٹ: SFTP کنکشن کی مطابقت کی تصدیق کرنا
مختلف کنفیگریشنز کے لیے JUnit ٹیسٹ کیسز
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
public class SFTPServiceTest {
@Test
public void testConnectionSuccess() {
SFTPService service = new SFTPService("SERVER_NAME", "USERNAME", "PASSWORD", 22);
assertTrue(service.connect());
}
@Test
public void testConnectionFailure() {
SFTPService service = new SFTPService("INVALID_SERVER", "USERNAME", "PASSWORD", 22);
assertFalse(service.connect());
}
}
JSch الگورتھم گفت و شنید کی ناکامیوں کے لیے ایڈوانس ٹربل شوٹنگ کی تلاش
JSch SFTP کنکشن کی غلطیوں سے نمٹنے کے دوران، خاص طور پر "الگورتھم مذاکرات ناکام"مسئلہ، الگورتھم کی مماثلت کی بنیادی وجوہات کو سمجھنا بہت ضروری ہے۔ اکثر، بنیادی وجہ کلائنٹ اور سرور کے درمیان معاون الگورتھم میں فرق ہوتا ہے۔ اس صورت میں، سرور کی SSH کنفیگریشن صرف پرانے الگورتھم کی اجازت دے سکتی ہے، جو اس سے مطابقت نہیں رکھتے۔ JSch کی ڈیفالٹس اس مسئلے کو حل کرنے کے لیے JSch کی الگورتھم کی ترجیحات میں ترمیم کرنا ہے جیسے کہ ترتیبات کو ترتیب دینا کیکس (کلیدی تبادلہ)، سائفرز، اور MACs، تاکہ کلائنٹ سرور کے ساتھ کامیابی سے گفت و شنید کر سکے۔
JSch پہلے سے طے شدہ الگورتھم کو اوور رائیڈ کرنے کے لیے لچک پیش کرتا ہے، اسے محدود سرور کے ماحول کے ساتھ ہم آہنگ بناتا ہے۔ ان اختیارات کو ترتیب دینے سے آپ قابل قبول کی وضاحت کر سکتے ہیں۔ kex الگورتھم، جیسے diffie-hellman-group14-sha1، جو عام طور پر لیگیسی سرورز کے ذریعہ تعاون یافتہ ہے۔ ان کنفیگریشنز کو تبدیل کرنے کے لیے، آپ استعمال کر سکتے ہیں۔ Properties جاوا میں آبجیکٹ، جہاں ترتیبات پسند ہیں۔ cipher.s2c (سرور سے کلائنٹ) اور cipher.c2s (کلائنٹ سے سرور) کی تعریف کی جاسکتی ہے۔ الگورتھم کی وضاحت واضح طور پر مطابقت کے مسائل کو نظرانداز کرنے میں مدد کرتی ہے جب سرور نئے، پہلے سے طے شدہ خفیہ کاری کے طریقوں کی حمایت نہیں کرتا ہے۔ ڈویلپمنٹ سرورز پر مختلف کنفیگریشنز کی جانچ کرنے کی بھی سفارش کی جاتی ہے تاکہ یہ یقینی بنایا جا سکے کہ سیٹنگز پروڈکشن میں بغیر کسی رکاوٹ کے کام کرتی ہیں۔
ہر ترتیب کی فعالیت کی تصدیق کے لیے یونٹ ٹیسٹ شامل کرنا ایک اچھا عمل ہے۔ کے ساتھ JUnit, ٹیسٹ توثیق کر سکتے ہیں کہ آیا SFTP کنکشن کامیاب ہوتا ہے یا سرور کی مختلف ضروریات کی بنیاد پر ناکام ہو جاتا ہے۔ یہ جانچ کا عمل ڈویلپرز کو یہ یقینی بنانے کی اجازت دیتا ہے کہ ان کی ترتیبات اپ ڈیٹس یا سرور کنفیگریشنز میں ہونے والی تبدیلیوں میں مطابقت رکھتی ہیں۔ یہ خاص طور پر ایسے معاملات میں مددگار ثابت ہوتا ہے جہاں پروڈکشن ورک فلو کے لیے کنکشن درکار ہوتے ہیں جو قابل اعتماد اور محفوظ فائل ٹرانسفر کا مطالبہ کرتے ہیں۔ ٹربل شوٹنگ اور ٹیسٹنگ دونوں JSch SFTP کنکشن کو مستحکم کرنے میں اہم کردار ادا کرتے ہیں، ایک لچکدار حل فراہم کرتے ہیں جو SSH سرور کے مختلف ماحول کے مطابق ہوتا ہے۔ 🛠
JSch الگورتھم مذاکرات کی ناکامیوں کو حل کرنے کے بارے میں عام سوالات
- "الگورتھم گفت و شنید ناکام" غلطی کا کیا مطلب ہے؟
- اس خرابی کا مطلب ہے کہ کلائنٹ اور سرور انکرپشن یا کلیدی ایکسچینج الگورتھم پر متفق نہیں ہو سکے، عام طور پر دونوں طرف سے غیر مطابقت پذیر ترتیبات کی وجہ سے۔
- میں JSch میں الگورتھم کو کس طرح اپنی مرضی کے مطابق بنا سکتا ہوں؟
- آپ استعمال کر سکتے ہیں۔ session.setConfig ایک کے ساتھ طریقہ کار Properties ہم آہنگ الگورتھم کی وضاحت کرنے پر اعتراض جیسے kex یا cipher.s2c.
- کا مقصد کیا ہے Properties JSch میں اعتراض؟
- دی Properties آبجیکٹ میں کنفیگریشنز ہوتی ہیں جو کنکشن کے لیے معاون الگورتھم بتاتی ہیں، جو آپ کو سرور کی ضروریات کے مطابق ڈھالنے کی اجازت دیتی ہیں۔
- کیا ہوگا اگر سرور صرف فرسودہ الگورتھم کو سپورٹ کرتا ہے؟
- جیسے پرانے الگورتھم کی وضاحت کریں۔ diffie-hellman-group14-sha1 کنفیگریشن میں ان سرورز کے ساتھ مطابقت کو یقینی بنانے کے لیے جو جدید خفیہ کاری کے معیارات کو سپورٹ نہیں کرتے ہیں۔
- کیا یونٹ ٹیسٹ JSch کی ترتیبات کی تصدیق میں مدد کر سکتے ہیں؟
- جی ہاں، استعمال کرتے ہوئے JUnit ٹیسٹ آپ کو تصدیق کرنے کی اجازت دیتا ہے کہ آیا کنفیگریشنز درست طریقے سے لاگو ہوئی ہیں، اس بات کو یقینی بناتے ہوئے کہ کنکشن مختلف سرور ماحول میں کامیاب ہو جائے گا۔
- میں ناکام کنکشن کو کیسے ڈیبگ کروں؟
- استعمال کریں۔ e.printStackTrace غلطیوں کا جائزہ لینے کے لیے کیچ بلاکس میں۔ ڈیبگنگ لاگز اس بات کی بصیرت فراہم کرتے ہیں کہ کنکشن کے عمل کے دوران گفت و شنید کہاں ناکام ہوتی ہے۔
- کیا کوئی مخصوص الگورتھم ہے جس سے مجھے مطابقت کے لیے شروع کرنا چاہیے؟
- diffie-hellman-group14-sha1 بڑے پیمانے پر میراثی نظاموں کی طرف سے حمایت کی جاتی ہے اور پرانی ترتیب کے ساتھ بہت سے سرورز کے لیے ایک اچھا نقطہ آغاز ہے۔
- پرانے الگورتھم استعمال کرتے ہوئے میں سیکیورٹی کو کیسے یقینی بنا سکتا ہوں؟
- سب سے محفوظ ہم آہنگ الگورتھم کا انتخاب کریں اور کسی بھی غیر معمولی سرگرمی کے لیے سرور لاگس کی نگرانی کریں۔ مثالی طور پر، صرف قابل اعتماد صارفین تک رسائی کو محدود کریں۔
- کیا JSch کے ڈیفالٹ الگورتھم زیادہ تر سرورز کے ساتھ مطابقت رکھتے ہیں؟
- JSch جدید الگورتھم سے ڈیفالٹ ہے، جو پرانے سرورز سے میل نہیں کھا سکتے۔ مطابقت کے لیے ان ترتیبات کو حسب ضرورت بنانا اکثر ضروری ہوتا ہے۔
- الگورتھم کے علاوہ کون سے دوسرے مسائل کنکشن کی خرابیوں کا سبب بن سکتے ہیں؟
- نیٹ ورک کے مسائل، غلط اسناد، اور فائر وال کی ترتیبات بھی کنکشن میں خلل ڈال سکتی ہیں۔ ان عوامل کی تصدیق کریں اگر الگورتھم کی ترتیب مسئلہ کو حل نہیں کرتی ہے۔
- کیا میں ایک سے زیادہ سرورز کے لیے ایک ہی ترتیب کو دوبارہ استعمال کر سکتا ہوں؟
- ہاں، JSch کنفیگریشنز کے لیے ایک ماڈیولر سیٹ اپ بنا کر، آپ ایک جیسی سیٹنگز کو مختلف سرورز پر اسی طرح کے انکرپشن کے تقاضوں کے ساتھ لاگو کر سکتے ہیں۔
محفوظ اور ہم آہنگ SFTP کنکشن کو یقینی بنانا
پابندی والے SFTP سرورز سے جڑتے وقت JSch کے کنفیگریشن کے اختیارات کو سمجھنا انمول ہو سکتا ہے۔ الگورتھم کو حسب ضرورت بنا کر اور مطابقت کے ٹیسٹ چلا کر، آپ "الگورتھم گفت و شنید ناکام" جیسی غلطیوں پر قابو پا سکتے ہیں اور ایک محفوظ کنکشن برقرار رکھ سکتے ہیں۔
ہر سرور ماحول کے لیے سیٹنگز کو ایڈجسٹ کرنا طویل مدتی فعالیت کو یقینی بناتا ہے، خاص طور پر پروڈکشن ورک فلو کے لیے۔ ان تکنیکوں کے ساتھ، Java کے JSch SFTP کنکشنز کو سنبھالنا قابل انتظام ہو جاتا ہے، جو سرور کی مختلف ضروریات کے ساتھ محفوظ فائل کی منتقلی کے لیے ایک قابل اعتماد حل پیش کرتا ہے۔ 🚀
JSch الگورتھم گفت و شنید کے مسائل کو حل کرنے کے ذرائع اور حوالہ جات
- JSch لائبریری کنفیگریشنز اور SFTP کنکشنز کے لیے ٹربل شوٹنگ کے اقدامات کی تفصیلات۔ سے رجوع کریں۔ JSch GitHub ذخیرہ تازہ ترین دستاویزات اور ریلیز کے لیے۔
- SSH الگورتھم گفت و شنید کی غلطیوں اور SFTP کے ساتھ پیش آنے والے عام مطابقت کے مسائل سے نمٹنے کے لیے تکنیکی رہنمائی۔ پر مفید بحث دیکھیں اسٹیک اوور فلو ڈویلپر کمیونٹی کے اشتراک کردہ حل کے لیے۔
- جاوا کا استعمال کرتے ہوئے محفوظ SFTP کنکشن کو ترتیب دینے کی بصیرت، بشمول میراثی سرورز اور خفیہ کاری کی ترتیبات کے انتظام کے بارے میں عملی تجاویز، پر دستیاب بیلڈونگ .