Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD



Утилита lsof. Определение открытых портов и запущенных процессов

Дата обновления: 07.04.2025

Теги: Linux FreeBSD

В этой заметке я приведу примеры использования команд unix, которые могут быть использованы значительно шире описанного здесь. Фактически, я просто приведу примеры. Если у вас есть удобные и полезные вам ключи / команды - пишите в комментариях!

lsof - это утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами. Поможет, если надо связать окрытые порты со службами.

 

Пример 1: вывод открытых портов в linux:

$ sudo lsof -P -i
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rdiffweb    518     root    5u  IPv4  16947      0t0  TCP 192.168.2.30:8080 (LISTEN)
sshd        549     root    3u  IPv4  16398      0t0  TCP *:22 (LISTEN)
sshd        549     root    4u  IPv6  16400      0t0  TCP *:22 (LISTEN)
nginx       555     root    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       556 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       557 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)

где:
-P - не резолвить номера портов в стандартные названия (например, если порт 443, то не писать https, а именно 443);
-i - отображать сетевые соединения (Internet socket files)

 

Пример 2: объединение опций

Например, нужно показать сетевые соединения, связанные с процессом nginx.

$ sudo lsof -c nginx -i

выдаст длинную портянку данных, в которых явно будут лишние сведения. Почему? Потому что lsof выдал объединенный вывод: и по опции -i, и по опции -c nginx. 

Если нужно объединение опций по принципу && в программировании, то нужно указать опцию -a:

$ sudo lsof -c nginx -a -i
COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   555     root    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx   556 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx   557 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx   558 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx   559 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)

А вот это то, что нужно.

В данном случае вывод равнозначен такой команде:

$ sudo lsof -i | grep nginx
nginx       555     root    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       556 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       557 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       558 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)
nginx       559 www-data    8u  IPv4  10996      0t0  TCP *:18081 (LISTEN)

Но это лишь в данном случае. Но если забыть про опцию -c, то grep может выручить.

 

Другие примеры с lsof:

  • lsof -i 4 -a -p 1234 (просмотр всех соединений IPv4, открытых процессом с PID = 1234)
  • lsof /dev/hd4 (Список открытых файлов на устройстве /dev/hd4)
  • lsof /dev/cdrom (Список процессов, работающих с CD ROM)
  • lsof -c ssh (Список подключений по ssh)
    Опция -c  показывает все открытые файлы, которые используются процессами, имя которых начинается с заданной строки.
     
  • lsof -ni | grep ssh (Еще один способо получить список подключений по ssh)

    выдаст нечто вроде

    sshd 2599 root 3u IPv6 8613 TCP *:22 (LISTEN)
    sshd 3924 root 3u IPv6 9286804 TCP 10.8.0.181:22->10.8.0.178:nat-stun-port (ESTABLISHED)
    sshd 3926 myuser 3u IPv6 9286804 TCP 10.8.0.181:22->10.8.0.178:nat-stun-port (ESTABLISHED)
    sshd 15109 root 3u IPv6 10572657 TCP 10.8.0.181:22->10.8.0.178:4461 (ESTABLISHED)
    sshd 15111 myuser 3u IPv6 10572657 TCP 10.8.0.181:22->10.8.0.178:4461 (ESTABLISHED)
    sshd 22818 root 3u IPv6 10632880 TCP 10.8.0.181:22->10.8.0.178:8151 (ESTABLISHED)
    sshd 22820 myuser 3u IPv6 10632880 TCP 10.8.0.181:22->10.8.0.178:8151 (ESTABLISHED)


Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?






Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.