Mam PID określonego procesu nasłuchującego na niektórych portach w moim systemie OS X i muszę wiedzieć, które porty są nasłuchiwane przez ten proces. Jak mogę to zrobić?
Wiem, że mogę lsof
się dowiedzieć, który proces nasłuchuje na porcie, ale muszę wykonać operację odwrotną.
Dziękuję Ci.
UPD
OS X używa narzędzi BSD, więc mam BSD netstat
nie Linuksa netstat
. Linux netstat
ma -p
opcję wyświetlania PID, BSD netstat
używa -p
do określenia portu i nie ma opcji wyświetlania PID.
networking
osx
bsd
shau-kote
źródło
źródło
netstat
mogę to dla ciebie zrobić. Możeszgrep
na PID, jeśli chcesz filtrować wyjścienetstat
lsof
użycie to nie tylko jeden sposób. możesz zrobić coś takiegolsof|grep ${PID}
. co z grubsza zrzuci wszystko igrep
wybierze linie z PID w nich. W przypadku braku szansy może wyświetlać nieistotną linię, ponieważ numer PID omyłkowo pasuje do innej wartości, ale szanse są znikomenetstat
nie może wyświetlać PID-ów.Odpowiedzi:
Sam znalazłem rozwiązanie, czytając je głęboko
man lsof
. (Tak, RT * M nadal pomaga.) Dzięki @Gilles za celowanie.Oto rozwiązanie:
lsof -aPi -p 555
(555 to PID).Wyjaśnienie:
-p
podać numer PID;-i
wyświetlać tylko urządzenia sieciowe;-a
do AND dwa warunki powyżej (w przeciwnym razie będą ORed);-P
wyświetla numery portów (zamiast domyślnych nazw portów).Dodatkowo można użyć
lsof -aPi4 -p 555
lublsof -aPi6 -p 55
dla adresów IPv4 lub IP6 tylko odpowiednio.Jeśli dane wyjściowe zostaną przeanalizowane przez inny program
-Fn
, może być pomocna opcja. Dzięki tej opcjilsof
wygenerujesz „wyjście dla innego programu” zamiast ładnie sformatowanego wyjścia.lsof -aPi4 -Fn -p 555
wyświetli coś takiego:PS Wszystko to przetestowałem na moim systemie OS X El Capitan, ale jak widzę, powinno działać również na Linuksie.
źródło
lsof
zapewnia informacje o plikach otwieranych przez procesy, w tym portach sieciowych. Jest dostępny na prawie wszystkich systemach uniksowych, w tym OSX .Rosetta Stone dla Unix nie wymienia żadnego innego narzędzia do „procesu pasujące do pliku lub portu” na OSX.
Aby wyświetlić listę procesów nasłuchujących na porcie TCP, możesz użyć
lsof -iUDP
wyświetla procesy z otwartym gniazdem UDP.lsof -i
wyświetla wszystkie otwarte gniazda sieciowe (klienci TCP, serwery TCP i inne protokoły IP).źródło
jeśli chcesz wiedzieć, który port nasłuchuje, możesz użyć opcji -p netstat. Musisz być superużytkownikiem:
jeśli chcesz dowiedzieć się więcej na ten temat, spróbuj tego linku
źródło
netstat
, mam OS X i dlatego używam BSDnetstat
. Służy-p
do określania portu TCP / IP i nie ma opcji wyświetlania PID.W FreeBSD możesz użyć
sockstat
tej informacji. Nie jestem pewien, czy OS Xsockstat
, ponieważ nie mam komputera Mac.Na przykład, aby zobaczyć wszystkie połączenia TCPv4:
sockstat -4
źródło
sockstat
na moim komputerze Mac nie ma polecenia. :(Możesz połączyć netstat z grep, awk i sed, aby wyświetlić porty z odpowiadającymi im pidami w Linux i Cygwin:
Więcej szczegółów
źródło