TCP dinleyicisi nasıl oluşturulur?


40

Giriş: Bir portun mevcut olup olmadığını kontrol edebilecek ve belirli bir maksimum port numarasına kadar false ise 1 ile artıran bir bash fonksiyonu yarattım. Örneğin, eğer port 500 müsait değilse, 501'in kullanılabilirliği 550 yılına kadar kontrol edilecektir.

Amaç: Bu bash fonksiyonunu test etmek için LISTEN durumunda olan bir dizi port oluşturmam gerekiyor.

Denemeler: Windows'ta bu PowerShell komutlarını kullanarak bir LISTEN portu oluşturmak mümkündür :

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>

Buna dayanarak, CentOS'ta da aynı şeyi yapabilecek bir komut hakkında düşünmeye çalışıyordum, ancak nedenini bilmiyorum ve bu sorunu çözecek bir çözüm bulmadan Google’a başladım.

Beklenen cevap : Bir LISTEN portu yaratabilen bir komut içeren cevabı kabul edip onaracağım ve komut çalıştırıldıktan sonra port LISTEN durumunda kalmalı, yani:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*

Bir yandan not: Bu danstan geçmeden dinleme portlarını bulmak mümkün. Açık Linux: netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. * BSD üzerinde: netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047,

Yanıtlar:


40

nc -lAradığınızı yapmak için bir yöntem olarak kullanabilirsiniz . Bazı uygulamalarda bağlantıların kalıcı olmasına izin veren ncbir -Lseçenek vardır.

Onlara yalnızca bir süre ihtiyaç duyarsanız, bu komutu bir fordöngüde açabilir ve bu şekilde açılan bir sürü bağlantı noktasını açabilirsiniz .

Bunların daha uzun süre açılması gerekiyorsa, bir daemon oluşturmak için süper sunuculardan birini kullanabilirsiniz.


1
Yerine -L: Ben öneririm -k, --keep-opendinleme modunda birden fazla bağlantıları kabul
Manuel Durando

37

Netcat'ı kullanarak bir bağlantı noktası dinleyicisi oluşturabilirsiniz.

root@ubuntu:~# nc -l 5000

portun açık olup olmadığını netstat komutunu kullanarak da kontrol edebilirsiniz.

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

nc ile de kontrol edebilirsiniz:

Netcat Server dinleyicisi:

nc -l localhost 5000

Netcat İstemcisi:

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

eğer port açık değilse

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
Limanı belirtmek zorunda kaldım -pya da işe yaramadı:nc -l -p 1234
Leahkim

nc -l 12345 ubuntu'da çalıştı 16.04
yuen shi

/bin/nc --> nc.traditional(Örneğin debian) olanlar için -pyukarıda @Leahkim'in önerdiği gibi seçeneği kullanın .
ankostis

6

Netcat kullanarak dinleyin.

# nc -l 5555

Ss ile kontrol et

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

0

Debian'ın netcatpaketinin, (en azından) bağlantı noktasını -pseçenek aracılığıyla sağlamanız gereken ve -kseçeneğin çalışmadığı farklı bir uygulaması olduğunu unutmayın . Docker'ı kullanarak bu sorunla karşılaşabilirsiniz.

sudo apt install -y netcat

nc -l -p 1337

Bunun openbsd-netcatyerine -kseçeneğin çalıştığı yeri kullanmayı düşünebilirsiniz .


0

Python kodunun altında sahte bir port açmak için yardımcı olur

'' 'İş parçacığı kullanan basit soket sunucusu' '' soket alma içe aktarma sys HOST = '' # Sembolik ad, tüm kullanılabilir arabirimler anlamına gelir PORT = 5500 # İsteğe göre ayrıcalıklı olmayan bağlantı noktası s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 'Soket oluşturuldu' yazdır

Soketi yerel ana bilgisayara ve bağlantı noktasına bağlayın

deneyin: s.bind ((HOST, PORT)) msn olarak yazılan.error: print 'Bind başarısız oldu. Hata Kodu: '+ str (msg [0]) +' Mesaj '+ msg [1] sys.exit () yazdır' Soket bağlama tamamlandı '

Soketi dinlemeye başla

s.listen (10) yazdır 'Soket şimdi dinliyor'

şimdi müşteriyle konuşmaya devam et

1: # bir bağlantıyı kabul etmek için beklerken - bir çağrı engelleme çağrısı, addr = s.accept () print '' + addr [0] + 'ile bağlantılı:' + str (addr [1]) s.close ()

Dosyayı kaydedin ve aşağıda gösterildiği gibi python komutuyla çalıştırın

~] # python portlistener.py Soket oluşturuldu Soket bağlantısı tamamlandı Soket şimdi dinliyor

Sonra gerekli makineden doğrulayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.