Liberare una porta TCP / IP?


Risposte:


214

Come hanno detto gli altri, dovrai uccidere tutti i processi che stanno ascoltando su quella porta. Il modo più semplice per farlo sarebbe usare il comando fuser (1). Ad esempio, per vedere tutti i processi in ascolto di richieste http sulla porta 80 (esegui come root o usa sudo):

# fuser 80/tcp

Se vuoi ucciderli, aggiungi semplicemente l'opzione -k.


1
Ho scoperto che anche l'invio di una richiesta alla porta la pulisce (non sono un esperto di Linux)
Matej,

1
Per installare il fusore su Debian: sudo apt-get install psmisc ( bitflop.com/document/107 )
Korneel

1
Funzionava, ma dovevo installare anche psmisc su CentOs 7 ( sudo yum install psmisc)
Marlon Bernardes,

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Hanynowsky,

76

Per uccidere una porta specifica in Linux usa il comando seguente

sudo fuser -k Port_Number/tcp

sostituire Port_Number con la porta occupata.


6
Questo effettivamente uccide il processo che ha aperto la porta e non la porta stessa.
Vinayc,

16

Puoi usare tcpkill(parte del dsniffpacchetto) per terminare la connessione sulla porta di cui hai bisogno:

sudo tcpkill -9 port PORT_NUMBER

11
questo si blocca$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Anentropic

16

Nel tipo di terminale:

netstat -anp|grep "port_number"

Mostrerà i dettagli della porta. Vai all'ultima colonna. Sarà in questo formato. Ad esempio: - PID / java

quindi eseguire:

kill -9 PID. Worked on Centos5

Per MAC:

lsof -n -i :'port-number' | grep LISTEN

Risposta del campione:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

e quindi eseguire:

kill -9 PID 

Ha funzionato su Macbook


ovviamente questo non funziona se la colonna PID è vuota per quella porta
Anentropic

1
... e ciò accade se non si dispone dell'autorizzazione per vedere il processo ... provare sudo netstata vedere effettivamente i PID :)
Anentropic

Stavo cercando di uccidere una porta su un'istanza di Amazon ec2 tramite putty cli. Per sempre ha detto che non aveva processi in esecuzione ma la porta (4200 per un'app angolare) era ancora aperta. Questo è l'unico comando che ha funzionato per me.
vtechmonkey,

9

Il "netstat --programs"comando ti fornirà le informazioni sul processo, supponendo che tu sia root. Quindi dovrai interrompere il processo "offensivo" che potrebbe riavviarsi solo per infastidirti :-).

Cosa stai effettivamente cercando di ottenere qui? Le soluzioni possono variare in base ai processi che detengono tali porte.


8

Per controllare tutte le porte:

netstat -lnp

Per chiudere una porta aperta:

fuser -k port_no/tcp

Esempio:

fuser -k 8080/tcp

In entrambi i casi è possibile utilizzare il sudocomando se necessario.


7

Termina il processo che sta ascoltando la porta in questione. Credo che netstat ti mostri gli ID di processo.


3
netstat -anp | grep <port> l'ultima colonna ha il processo
user1747935

2

Se vuoi davvero terminare immediatamente un processo, invii un segnale KILL anziché un segnale TERM (quest'ultimo una richiesta di arresto, il primo avrà effetto immediatamente senza alcuna pulizia). È facile da fare:

kill -KILL <pid>

Tuttavia, tenere presente che, a seconda del programma che si sta arrestando, il suo stato potrebbe essere gravemente danneggiato durante l'operazione. Normalmente si desidera inviare un segnale KILL solo quando la normale terminazione non funziona. Mi chiedo quale sia il problema di fondo che cerchi di risolvere e se uccidere sia la soluzione giusta.


0

Penso che l'unico modo sarà fermare il processo che ha aperto la porta.



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.