Come creare un listener TCP?


40

Introduzione: ho creato una funzione bash in grado di verificare se una porta è disponibile e la incrementa di 1 se falsa fino a un determinato numero di porta massimo. Ad esempio, se la porta 500 non è disponibile, la disponibilità di 501 verrà verificata fino a 550.

Obiettivo: per testare questa funzione bash è necessario creare un intervallo di porte in stato ASCOLTA.

Tentativi: su Windows è possibile creare una porta LISTEN usando questi comandi di 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>

Sulla base di questo stavo cercando di pensare a un comando che potesse fare lo stesso su CentOS, ma non so perché e ho iniziato a Google senza trovare una soluzione che risolva questo problema.

Risposta prevista : accetterò e valuterò la risposta che contiene un comando in grado di creare una porta LISTEN e una volta eseguito il comando, la porta dovrebbe rimanere nello stato LISTEN, ovvero:

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

Una nota a margine: è possibile trovare le porte di ascolto senza passare per tutta questa danza. Su Linux: netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. On * BSD: netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047

Risposte:


40

È possibile utilizzare nc -lcome metodo per fare quello che stai cercando. Alcune implementazioni di nchanno -Lun'opzione che consente alle connessioni di persistere.

Se ne hai bisogno solo per un po ', puoi aprire questo comando in un forciclo e far aprire un sacco di porte in quel modo.

Se hai bisogno di aprirli più a lungo, puoi usare uno dei super server per creare un demone.


1
Invece di -LVorrei suggerire: -k, --keep-openaccettare più connessioni in modalità ascolto
Manuel Durando

37

è possibile creare un listener di porte utilizzando Netcat.

root@ubuntu:~# nc -l 5000

puoi anche verificare se la porta è aperta o non utilizza il comando 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

puoi anche verificare con nc:

Listener Server Netcat:

nc -l localhost 5000

Client Netcat:

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

se la porta non è aperta

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

4
Ho dovuto specificare la porta con -po non ha funzionato:nc -l -p 1234
Leahkim,

nc -l 12345 ha lavorato in Ubuntu 16.04
yuen shi l'

Per quelli con /bin/nc --> nc.traditional(es. Debian), usa l' -popzione, come consigliato da @Leahkim, sopra.
ankostis

6

Ascolta usando netcat.

# nc -l 5555

Controlla usando ss

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

0

Si noti che il netcatpacchetto Debian ha un'implementazione diversa in cui (almeno) è necessario fornire la porta tramite l' -popzione e l' -kopzione non funziona. È possibile riscontrare questo problema utilizzando Docker.

sudo apt install -y netcat

nc -l -p 1337

Puoi considerare di utilizzare openbsd-netcatinvece dove funziona l' -kopzione.


0

Sotto il codice Python è utile aprire una porta fittizia

'' 'Server socket semplice che utilizza thread' '' import socket import sys HOST = '' # Nome simbolico, che significa tutte le interfacce disponibili PORT = 5500 # Porta arbitraria non privilegiata s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) stampa 'Socket creato'

Associare il socket all'host e alla porta locali

try: s.bind ((HOST, PORT)) tranne socket.error come msg: print 'Bind non riuscito. Codice errore: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print' Socket bind complete '

Inizia ad ascoltare sulla presa

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

ora continua a parlare con il cliente

mentre 1: # attende di accettare una connessione - blocca la chiamata conn, addr = s.accept () stampa 'Connected with' + addr [0] + ':' + str (addr [1]) s.close ()

Salvare il file ed eseguirlo con il comando python come mostrato di seguito

~] # python portlistener.py Socket creato Socket bind Socket completo ora in ascolto

Quindi è possibile verificare dalla macchina richiesta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.