Jak utworzyć detektor TCP?

40

Wprowadzenie: Utworzyłem funkcję bash, która jest w stanie sprawdzić, czy port jest dostępny, i zwiększa go o 1, jeśli ma wartość false, aż do określonego maksymalnego numeru portu. Np. Jeśli port 500 jest niedostępny, dostępność 501 będzie sprawdzana do 550.

Cel: Aby przetestować tę funkcję bash, muszę utworzyć szereg portów, które są w stanie LISTEN.

Próby: W systemie Windows można utworzyć port LISTEN przy użyciu następujących poleceń programu PowerShell :

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>

Na tej podstawie próbowałem wymyślić polecenie, które mogłoby zrobić to samo na CentOS, ale nie wiem dlaczego i zacząłem Google, nie znajdując rozwiązania, które rozwiązałoby ten problem.

Oczekiwana odpowiedź : Akceptuję i głosuję odpowiedź zawierającą polecenie, które jest w stanie utworzyć port LISTEN, a po uruchomieniu polecenia port powinien pozostać w stanie LISTEN, tj .:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*
030
źródło
Na marginesie: można znaleźć porty odsłuchowe bez przechodzenia przez cały ten taniec. Na Linux: netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. Na * BSD: netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047,

Odpowiedzi:

40

Możesz użyć nc -ltej metody do robienia tego, czego szukasz. Niektóre implementacje ncmają -Lopcję, która pozwala na zachowanie połączeń.

Jeśli potrzebujesz ich tylko na chwilę, możesz otworzyć to polecenie w forpętli i otworzyć kilka portów w ten sposób.

Jeśli potrzebujesz ich dłużej otwartych, możesz użyć jednego z super serwerów do stworzenia demona.

Dana Marble
źródło
1
Zamiast -LProponuję: -k, --keep-openakceptować wiele połączeń w trybie słuchać
Manuel Durando
37

możesz utworzyć nasłuchiwanie portów za pomocą Netcat.

root@ubuntu:~# nc -l 5000

możesz również sprawdzić, czy port jest otwarty, czy nie, używając polecenia 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

możesz również sprawdzić za pomocą nc:

Odbiornik serwera Netcat:

nc -l localhost 5000

Klient Netcat:

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

jeśli port nie jest otwarty

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused
sameh Ammar
źródło
4
Musiałem określić port z -plub nie działał:nc -l -p 1234
Leahkim
nc -l 12345 pracował w ubuntu 16.04
yuen shi
Dla tych z /bin/nc --> nc.traditional(np. Debian), użyj -popcji, jak zalecił @Leahkim powyżej.
ankostis
6

Słuchaj za pomocą NetCat.

# nc -l 5555

Sprawdź za pomocą ss

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#
Steve
źródło
0

Zauważ, że netcatpakiet Debiana ma inną implementację, w której (przynajmniej) musisz podać port poprzez -popcję, a -kopcja nie działa. Możesz napotkać ten problem przy użyciu Dockera.

sudo apt install -y netcat

nc -l -p 1337

Można rozważyć użycie openbsd-netcatzamiast gdzie -kdziała opcja.

to mój projekt
źródło
0

Poniższy kod python jest pomocny w otwarciu fikcyjnego portu

'' Prosty serwer gniazd wykorzystujący wątki '' import importu importu sys HOST = '' # Nazwa symboliczna, co oznacza wszystkie dostępne interfejsy PORT = 5500 # Arbitralny nieuprzywilejowany port s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) drukuj „Utworzono gniazdo”

Powiąż gniazdo z lokalnym hostem i portem

try: s.bind ((HOST, PORT)) z wyjątkiem socket.error jako msg: print 'Powiązanie nie powiodło się. Kod błędu: „+ str (msg [0]) +„ Message ”+ msg [1] sys.exit () print„ Socket bind complete ”

Zacznij słuchać na gnieździe

s.listen (10) print „Gniazdo teraz nasłuchuje”

teraz rozmawiaj z klientem

a 1: # czekaj, aby zaakceptować połączenie - blokowanie połączenia conn, addr = s.accept () print 'Connected with' + addr [0] + ':' + str (addr [1]) s.close ()

Zapisz plik i uruchom go za pomocą polecenia python, jak pokazano poniżej

~] # python portlistener.py Socket utworzony Socket bind zakończony Socket teraz nasłuchuje

Następnie możesz zweryfikować z wymaganej maszyny.

Rohit
źródło