Jak zamknąć lub (odblokować?) Port pozostawiony otwarty przez nieuczciwą aplikację?

19

Używam Fedory 13 64-bitowej. Mój program zaćmienia uruchamia serwer na porcie 9050, ale zamykam program, zaćmienie nie powoduje prawidłowego zamknięcia serwera. Ponowne uruchomienie zaćmienia nie ma wpływu.

Jak mogę przymusowo zamknąć lub usunąć powiązanie portu z linii poleceń?

Wiem, że ponowne uruchomienie lub wylogowanie i ponowne wyczyszczenie portów wyczyści porty, ale dla mnie jest to znacznie wolniejszy proces. Szukam przymusowego zamknięcia portu w wierszu polecenia.

znak
źródło

Odpowiedzi:

10

Jedynym sposobem na wymuszone zamknięcie portu nasłuchującego jest zabicie procesu nasłuchującego. Zastosowanie lsof, netstat, fuser- jako root - aby dowiedzieć się, identyfikator procesu. Gdy proces zakończy się (sam lub po zabiciu), jądro automatycznie wyczyści wszystkie otwarte gniazda. (Mogą jednak zdarzyć się przypadki, że programy odmówią słuchania na tym samym porcie przez kilka minut; w takim przypadku wystarczy poczekać).

użytkownik1686
źródło
19
lsof -n -i

Znajdź proces, którego szukasz, i zabij go.

Z lsofinstrukcji :

-n Ta opcja blokuje konwersję numerów sieciowych na nazwy hostów dla plików sieciowych. Hamowanie konwersji może przyspieszyć działanie lsof. Jest to również przydatne, gdy wyszukiwanie nazw hosta nie działa poprawnie.

-i [i] Ta opcja wybiera listę plików, których adres internetowy jest zgodny z adresem określonym w i. Jeśli nie podano adresu, ta opcja wybiera listę wszystkich plików internetowych i x.25 (HP-UX).

Myślę, że taka sama odpowiedź na to pytanie .

jonnyflash
źródło
7
Włącz | grep ":9050"(lub
inny
9

Możesz użyć fuserpolecenia za pomocą -kprzełącznika.

Na przykład, aby zamknąć port 111, możesz wykonać następujące czynności: fuser -k 111/tcp (oszczędza to również kłopotów ze znalezieniem identyfikatora procesu, aby go zabić, tak jak domyślnie utrwalacz)

Zauważ, że niektóre procesy restartują się automatycznie po zamknięciu. W tym celu należy sprawdzić plik konfiguracyjny każdego procesu, aby znaleźć odpowiednie obejście.

tony9099
źródło
-3

Miałem ten sam problem, po prostu poszukaj procesu, który nasłuchuje tego portu za pomocą polecenia cmd w systemie Windows

netstat -a -b

następnie możesz go zamknąć za pomocą menedżera zadań

daqop
źródło
2
Przepraszam, przegłosowałem. Wspominasz „w systemie Windows”. Parametr „-b” dla netstat, który pokazuje nazwy plików wykonywalnych, jest specyficzny dla Microsoft Windows. (Odmiany netstat w systemie Unix mogą mieć podobną funkcjonalność, ale zazwyczaj nie używają tego samego parametru.) Jednak pytanie brzmiało „Fedora”, więc pytający tego pytania szukał informacji o Fedorze 13 64bit, innym systemie operacyjnym. Strona man netstat dla Fedory wskazuje, że użycie -ppokazuje PID (którego można użyć do identyfikacji nazwy pliku wykonywalnego).
TOOGAM
1
W tej odpowiedzi jest kilka błędów. Odpowiedź zawiera błąd gramatyczny, którego można było uniknąć. Odpowiedź nie dotyczy również Fedory, o której wyraźnie wspomniano w pierwszym zdaniu pytania. To nie jest tak, że pytanie nie zawierało tej informacji, gdy odpowiedź została przesłana 30 minut temu, pytanie nie było edytowane od lipca 2011 roku, czyli prawie 5 lat temu. Przyjmuję więc odpowiedź taką, jaka jest, odpowiedź „ja też”, która w rzeczywistości bardzo rzadko jest pomocna.
Ramhound,