Ketika saya terhubung ke https://www.google.co.id ini berubah menjadi 216.58.198.228:443. Kemudian koneksi ke saya terbuka di [Alamat IP Saya]: 63998.
Pertanyaan saya adalah bagaimana 63998 port dipilih dan apakah ada cara untuk memaksanya menjadi 63999.
networking
port
tcp
Theathron
sumber
sumber
Jawaban:
Bagaimana port lokal ditentukan
Nomor port dipilih oleh perangkat lunak implementasi TCP dari sejumlah nomor port yang disebut Ephemeral Ports .
Mekanisme yang tepat untuk memilih nomor port dan kisaran yang akan digunakan bergantung pada Sistem Operasi.
Apakah ada cara untuk memaksanya menjadi 63999.
Ini dapat dilakukan dengan mengubah konfigurasi perangkat lunak implementasi TCP.
Petunjuk tentang konfigurasi rentang Pelabuhan Ephemeral untuk berbagai Sistem Operasi yang berbeda dapat ditemukan di Mengubah Rentang Pelabuhan Ephemeral .
Namun, itu bukan ide yang baik untuk membatasi jangkauan ke satu port, misalnya
63999
.Bahkan pada Windows ini tidak mungkin karena:
Rentang Pelabuhan Ephemeral
Sumber Rentang Pelabuhan Ephemeral
Mengubah Kisaran Pelabuhan Ephemeral
Linux:
Windows Vista / Windows Server 2008 dan yang lebih baru:
Sumber Mengubah Rentang Port Ephemeral
Sumber Microsoft Knowledgebase Article 929851 :
Windows XP dan yang lebih lama:
Sumber Mengubah Rentang Port Ephemeral
sumber
bind
sistem sebelum panggilanconnect
. Beberapa aplikasi memiliki opsi untuk melakukan itu, aplikasi lain tidak.Jawaban David Postill benar sekali. Saya hanya ingin menambahkannya, dengan menekankan bahwa mengubah rentang port sementara di Linux sangat sederhana, bahwa OP memiliki jawaban yang pasti.
Anda mengubah EPR sebagai berikut:
dan Anda dapat memilih port 50000 (sebagai contoh) dengan skrip berikut:
Satu peringatan di sini: karena ada satu port dalam jangkauan, aplikasi lain mungkin mengambilnya dari Anda antara eksekusi baris ketiga dan keempat di atas; juga, bahkan jika tidak ada kondisi balapan, Anda akan melumpuhkan semua aplikasi lain sampai Anda memulihkan EPR besar, itulah sebabnya saya mengembalikan rentang asli sesegera mungkin.
Jadi, jika sistem operasi OPs adalah Linux, jawabannya adalah hal itu bisa dilakukan dengan mudah.
Hebatnya, ini tidak semudah pada BSD, beberapa di antaranya bahkan tidak memiliki pengaturan kernel runtime untuk EPR. MacOS X, FreeBSD dan OpenBSD perlu memodifikasi file /etc/sysctl.conf , tetapi mereka memiliki pilihan berbeda untuk EPR.
Terlepas dari yang di atas dan dari OS, fakta bahwa sesuatu dapat dilakukan tidak berarti itu harus dilakukan: mengapa Anda membutuhkan ini? Saya tidak bisa memikirkan satu kasus penggunaan.
sumber
BIND_PORT
opsional, sehingga kode tersebut masih dapat digunakan dengan cara yang persis sama seperti aslinya. Saya pikirhtons(bind_port_env ? atoi(bind_port_env) : 0)
akan melakukan hal yang benar.Perlu ditambahkan bahwa kernel Linux juga memiliki
net.ipv4.ip_local_reserved_ports
kenop yang agak berlawanan tapi tetap saja mungkin sangat berguna karena dengan begitu Anda bisa "membuat lubang" untuk layanan yang membuka port tertentu di berbagai port yang tidak tetap.
Kutipan singkat dari dokumen :
sumber