2010-04-06 03:39:57 +0000 2010-04-06 03:39:57 +0000
116
116

Handmatig sluiten van een poort van commandline

Ik wil een open poort sluiten die in luisterstand staat tussen mijn client en server applicatie.

Is er een handmatige opdrachtregel optie in Linux om een poort te sluiten?

NOTE: Ik kwam te weten dat “alleen de applicatie die eigenaar is van de aangesloten socket deze moet sluiten, wat zal gebeuren als de applicatie eindigt.”

Ik begrijp niet waarom het alleen mogelijk is door de applicatie die het opent … Maar ik ben nog steeds benieuwd of er een andere manier is om het te doen.

Antwoorden (13)

137
137
137
2013-11-01 01:43:00 +0000

Ik had hetzelfde probleem, het proces moet in leven blijven, maar het stopcontact moet sluiten. Het sluiten van een socket in een lopend proces is niet onmogelijk maar wel moeilijk:

  1. zoek het proces :

  2. zoek de bestandsdescriptor van de socket in het proces

  3. Sluit nu het proces aan:

  4. Sluit nu de socket:

20
20
20
2012-02-13 08:44:54 +0000

Fuser kan ook gebruikt worden

fuser -k -n *protocol portno*

Hier is het protocol tcp/udp en portno is het nummer dat u wilt sluiten. Bijv.

fuser -k -n tcp 37

Meer info op fuser man pagina

6
6
6
2010-04-06 09:38:15 +0000

U kunt ook gebruik maken van iptables:

iptables -I INPUT -p tcp --dport 80 -j DROP

Het bereikt in principe wat u wilt. Dit zal al het TCP verkeer naar poort 80 brengen.

3
3
3
2010-04-06 03:45:53 +0000
netstat -anp | grep 80

Het zou je moeten vertellen, als je apache draait, “httpd” (dit is slechts een voorbeeld, gebruik de poort die je applicatie gebruikt in plaats van 80)

pkill -9 httpd

of

killall -9 httpd
``` &001
2
2
2
2015-05-27 03:46:19 +0000

Ik zocht eerst de mongo en node processen, deed daarna het volgende:

ps -A | grep node

10418 pts/23 00:00:05 node

10551 pts/23 00:00:00 node

ps -A | grep mongo

10490 pts/23 00:00:00 mongod

Eenmaal geïdentificeerd, doodt u gewoon de processen met het kill commando.

kill -9 10418
kill -9 10490

Ten slotte, type meteor en het zou weer moeten werken.

2
2
2
2012-04-22 05:02:17 +0000

Je zou er waarschijnlijk gewoon achter kunnen komen welk proces de socket heeft geopend waarmee de poort is geassocieerd, en dat proces doden.

Maar, je zou je moeten realiseren dat tenzij dat proces een handler heeft die alle spullen die het gebruikte de-initialiseert (open bestanden, sockets, vorken, spullen die kunnen blijven hangen tenzij het goed gesloten is bij beëindiging) dan zou je die slepen op de systeemprestaties hebben gemaakt. Plus, de socket blijft open totdat de kernel zich realiseert dat het proces is gedood. Dat duurt meestal maar een minuut.

Ik veronderstel dat de betere vraag zou zijn: Welke poort (behorend bij welk proces) wil je stoppen?

Als je probeert een achterdeur of virus dat je gevonden hebt te stoppen, dan moet je op zijn minst leren welke gegevens heen en weer gaan voordat je het beëindigt. (wireshark is hier goed voor) (En de uitvoerbare naam van het proces zodat je het kunt verwijderen en voorkomen dat het terugkomt bij het herstarten) of, als het iets is wat je hebt geïnstalleerd (zoals HTTPD of FTPD of iets dergelijks) dan zou je al toegang moeten hebben tot het proces zelf.

Meestal zal het een controleprogramma hebben (HTTPD stop|start of iets dergelijks). Of, als het een systeem ding is, zou je er waarschijnlijk niet mee moeten knoeien. Hoe dan ook, ik dacht dat aangezien iedereen je de “how-to” invalshoek geeft, ik je het voorbehoud zou moeten maken.

2
2
2
2015-04-23 06:06:09 +0000

Als u wilt dat uw poort eerder wordt vrijgegeven, moet u de volgende waarde instellen:

echo 1 > /proc/sys/net/ipv4/tcp_fin_timeout

om deze in te stellen van 60 seconden (standaard) tot 1 seconde

1
1
1
2010-04-06 04:10:46 +0000

Je zou een script kunnen schrijven dat de iptables wijzigt en opnieuw opstart. Een script om een regel toe te voegen die alle pakketten op de poort laat vallen, een ander script om die regel te verwijderen.

De andere antwoorden hebben je laten zien hoe je het proces dat aan de poort gebonden is kunt doden - dit is misschien niet wat je wilt. Als je wilt dat de server blijft draaien, maar om te voorkomen dat er verbindingen van clients komen, dan wil je de poort blokkeren, niet het proces stoppen.

1
1
1
2015-07-29 02:25:58 +0000

U kunt het commando genaamd killcx gebruiken, waarbij een verbinding wordt gesloten zonder dat er een proces wordt gedood.

  • syntaxis:
killcx [dest_ip:dest_port] {interface}

dest_ip : remote IP
dest_port : remote port
interface (optional) : network interface (eth0, lo etc).
  • voorbeeld:
killcx 120.121.122.123:1234
killcx 120.121.122.123:1234 eth0
1
1
1
2015-10-15 08:45:34 +0000

Ik ben me ervan bewust dat dit antwoord strikt genomen geen antwoord geeft op de vraag zelf, maar het lezen ervan kan relevante informatie zijn:

Het standaard gedrag van het binden van een socket aan een poort (en adres) is dat wanneer de socket wordt gesloten door abrupte beëindiging van het proces, de socket een tijdje in TIME_WAIT zal blijven. Dit betekent dat u niet onmiddellijk opnieuw kunt binden aan dit adres/poort. Als u het systeem zelf ontwikkelt via de standaard BSD-socketinterface, kunt u dit gedrag (tenminste tot op zekere hoogte) controleren met de SO_REUSEADDR-socketoptie. Dit stelt u in principe in staat om opnieuw te binden in dezelfde adres/poort als de socket in de TIME_WAIT status staat. Maar nog steeds één socket per poort!

Deze informatie moet echter alleen worden gebruikt als ontwikkelingshulp, omdat er een reden is voor het bestaan van TIME_WAIT, die al in de andere antwoorden is uitgelegd.

1
1
1
2013-11-01 02:08:35 +0000

Nog een probleem: soms is de kernel zelf eigenaar van poorten. Ik weet dat NAT-routering sommige poorten openhoudt voor NAT-gebruik. U kunt hier geen proces voor doden, dit is een kernel, en een herconfiguratie en een reboot is vereist.

0
0
0
2016-03-30 10:02:54 +0000

Als u geen verkeer over het stopcontact wilt, maar het proces in leven wilt houden:

tcpkill -i eth0 host xxx.xxx.xxx.xxx and port yyyy

zal een snuivende daemon starten die al het verkeer op die poort onderschept en verprutst. Erg handig voor het testen van uw applicaties voor netwerksplitsingen.

0
0
0
2019-08-07 15:17:33 +0000

Je kunt een afluisterapparaat afsluiten met ss :

sudo ss --kill state listening src :1234

waarbij 1234 je poortnummer is.

ss maakt deel uit van het iproute2 pakket, dus er is een sterke verandering het is al geïnstalleerd op een moderne Linux.

Ik leerde hierover van een antwoord op een verwante vraag .