Bagaimana cara membuat pendengar TCP?

40

Pendahuluan: Saya telah membuat fungsi bash yang dapat memeriksa apakah port tersedia dan menambahnya dengan 1 jika salah sampai jumlah port maksimum tertentu. Misalnya, jika port 500 tidak tersedia maka ketersediaan 501 akan diperiksa hingga 550.

Tujuan: Untuk menguji fungsi bash ini, saya perlu membuat berbagai port yang dalam status LISTEN.

Mencoba: Pada Windows dimungkinkan untuk membuat port LISTEN menggunakan perintah PowerShell ini :

PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP    0.0.0.0:1234           0.0.0.0:0              LISTENING       InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>

Berdasarkan ini saya mencoba untuk memikirkan tentang perintah yang dapat melakukan hal yang sama pada CentOS, tetapi saya tidak tahu mengapa dan saya mulai ke Google tanpa menemukan solusi yang memecahkan masalah ini.

Jawaban yang diharapkan : Saya akan menerima dan memperbaiki jawaban yang berisi perintah yang dapat membuat port LISTEN dan setelah perintah dijalankan port harus tetap dalam status LISTEN, yaitu:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*
030
sumber
Di samping catatan: adalah mungkin untuk menemukan port mendengarkan tanpa melalui semua tarian ini. Pada Linux: netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. Pada * BSD: netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047

Jawaban:

40

Anda dapat menggunakan nc -lsebagai metode untuk melakukan apa yang Anda cari. Beberapa implementasi ncmemiliki -Lopsi yang memungkinkan koneksi tetap ada.

Jika Anda hanya membutuhkannya sebentar, Anda bisa membuka perintah ini dalam satu forlingkaran dan membuka banyak port dengan cara itu.

Jika Anda membutuhkan ini dibuka lebih lama, Anda dapat menggunakan salah satu server super untuk membuat daemon.

Dana Marble
sumber
1
Alih-alih -Lsaya akan menyarankan: -k, --keep-openmenerima beberapa sambungan dalam modus mendengarkan
Manuel Durando
37

Anda dapat membuat pendengar port menggunakan Netcat.

root@ubuntu:~# nc -l 5000

Anda juga dapat memeriksa apakah port terbuka atau tidak menggunakan perintah netstat.

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

Anda juga dapat memeriksa dengan nc:

Pendengar Server Netcat:

nc -l localhost 5000

Klien Netcat:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

jika port tidak terbuka

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused
sameh Ammar
sumber
4
Saya harus menentukan port dengan -patau tidak berfungsi:nc -l -p 1234
Leahkim
nc -l 12345 bekerja di ubuntu 16.04
yuen shi
Bagi mereka dengan /bin/nc --> nc.traditional(misalnya debian), gunakan -popsi, seperti yang disarankan @Leahkim, di atas.
ankostis
6

Dengarkan menggunakan netcat.

# nc -l 5555

Periksa menggunakan ss

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#
steve
sumber
0

Perhatikan bahwa netcatpaket Debian memiliki implementasi yang berbeda di mana (setidaknya) Anda perlu menyediakan port melalui -popsi dan -kopsi tidak berfungsi. Anda mungkin mengalami masalah ini menggunakan Docker.

sudo apt install -y netcat

nc -l -p 1337

Anda dapat mempertimbangkan untuk menggunakan openbsd-netcattempat -kopsi ini bekerja.

ini adalah desainku
sumber
0

Di bawah kode python sangat membantu untuk membuka port dummy

'' 'Server soket sederhana menggunakan utas' '' impor soket impor sys HOST = '' # Nama simbolis, artinya semua antarmuka yang tersedia PORT = 5500 # Port yang non-istimewa sewenang-wenang s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) cetak 'Soket dibuat'

Bind socket ke host dan port lokal

coba: s.bind ((HOST, PORT)) kecuali socket.error sebagai msg: print 'Bind gagal. Kode Kesalahan: '+ str (msg [0]) +' Pesan '+ msg [1] sys.exit () cetak' Socket bind complete '

Mulai mendengarkan pada soket

s.listen (10) cetak 'Socket now listening'

sekarang terus berbicara dengan klien

sementara 1: # tunggu untuk menerima koneksi - memblokir panggilan samb, addr = s.accept () cetak 'Terhubung dengan' + addr [0] + ':' + str (addr [1]) s.close ()

Simpan file dan jalankan dengan perintah python seperti yang ditunjukkan di bawah ini

~] # python portlistener.py Socket dibuat Socket bind Socket lengkap sekarang mendengarkan

Kemudian Anda dapat memverifikasi dari mesin yang diperlukan.

Rohit
sumber