Прочитайте “/ proc”, щоб дізнатися, чи відкрив процес порт


13

Мені потрібно знати, чи є процес із заданим PID як відкритим портом без використання зовнішніх команд. Потім я повинен використовувати /procфайлову систему. Я можу прочитати /proc/$PID/net/tcpфайл, наприклад, і отримати інформацію про порти TCP, відкриті процесом. Однак у багатопотоковому процесі /proc/$PID/task/$TIDкаталог також містить net/tcpфайл. Моє запитання:

чи потрібно мені перейти всі net/tcpфайли потоків , чи буде порт, відкритий потоками, записаний у net/tcpфайл процесу .

Відповіді:


23

Я можу, наприклад, прочитати файл / proc / $ PID / net / tcp і отримати інформацію про порти TCP, відкриті процесом.

Цей файл не є списком портів tcp, відкритим процесом . Це список усіх відкритих портів tcp у поточному просторі мережних імен, а для процесів, що працюють у тому ж просторі мережевих імен, ідентичний вмісту /proc/net/tcp.

Щоб знайти порти, відкриті вашим процесом, вам потрібно буде отримати список дескрипторів сокетів /proc/<pid>/fdі потім зіставити ці дескриптори з inodeполем /proc/net/tcp.


Спасибі за вашу відповідь. І якщо процес багатопотоковий, чи потрібно мені переглядати весь fdкаталог кожного потоку? Або /proc/pid/fdкаталог "успадковує" /proc/pid/task/tid/fdкаталоги?
rmonjo

Я не впевнений, але це здається легким для перевірки.
larsks

8
@rmonjo Threads не може відкрити файли, лише процеси можуть. fdКаталог нитки просто повторює fdкаталог процесу.
Жил "ТАК - перестань бути злим"

0

Будь ласка

cat /proc/$PID/net/tcp

і ви отримаєте такий вихід

  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

Другий стовпець (local_address) виводить порт у шістнадцятковій кількості. Використовуйте калькулятор програмування, щоб перетворити шістнадцятковий код у десятковий.

Наприклад, тут порт: 01BB (у шістнадцятковій формі) дорівнює 433 (у десятковій частині), що є портом HTTPS за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.