Przeczytaj „/ proc”, aby wiedzieć, czy proces otworzył port

13

Muszę wiedzieć, czy proces z danym PID jako otworzył port bez użycia zewnętrznych poleceń. Następnie muszę użyć /procsystemu plików. Mogę /proc/$PID/net/tcpna przykład odczytać plik i uzyskać informacje o portach TCP otwartych przez proces. Jednak w procesie wielowątkowym /proc/$PID/task/$TIDkatalog będzie również zawierał net/tcpplik. Moje pytanie brzmi :

czy muszę przejrzeć wszystkie net/tcppliki wątków , czy też port otwarty przez wątki zostanie zapisany w net/tcppliku procesu?

rmonjo
źródło

Odpowiedzi:

23

Mogę na przykład odczytać plik / proc / $ PID / net / tcp i uzyskać informacje o portach TCP otwieranych przez proces.

Ten plik nie jest listą portów TCP otwieranych przez proces . Jest to lista wszystkich otwartych portów TCP w bieżącej sieciowej przestrzeni nazw, a dla procesów działających w tej samej sieciowej przestrzeni nazw jest identyczna z zawartością /proc/net/tcp.

Aby znaleźć porty otwarte przez proces, musisz uzyskać listę deskryptorów gniazd /proc/<pid>/fd, a następnie dopasować te deskryptory do inodepola /proc/net/tcp.

Larsks
źródło
Dziękuję za Twoją odpowiedź. A jeśli proces jest wielowątkowy, czy muszę przeglądać cały fdkatalog każdego wątku? Czy /proc/pid/fdkatalog „dziedziczy” /proc/pid/task/tid/fdkatalogi?
rmonjo
Nie jestem pewien, ale wydaje się to łatwe do przetestowania.
larsks
8
@rmonjo Wątki nie mogą otwierać plików, mogą je tylko procesy. fdKatalog wątku po prostu powtarza fdkatalogu procesu.
Gilles „SO- przestań być zły”
0

Proszę

cat /proc/$PID/net/tcp

i otrzymasz taki wynik

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
  0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 2891985097 1 0000000000000000 100 0 0 10 0

Druga kolumna (adres_lokalny) wyniku pokazuje port w systemie szesnastkowym. Użyj kalkulatora programowania, aby przekonwertować kod szesnastkowy na dziesiętny.

Na przykład port: 01BB (szesnastkowy) jest równy 433 (dziesiętnie), co jest domyślnym portem HTTPS.

PHZ.fi-Pharazon
źródło