lsof для сетевого администратора
В работе администратора довольно часто возникает необходимость просмотра открытых сетевых портов в системе, сетевых соединений, определения процессов, которые работают с этими портами/соединениями и т.д. и т.п. Как правило, для выполнения этих операций используются команды netstat и sockstat (в BSD системах).
Но вот буквально сегодня для себя узнал, что чудная утилита lsof, которую я часто использую для просмотра открытих файлов, позволяет также проводить эти операции, причем не безуспешно.
Для работы с сетевыми сокетами у данной команды служит ключ -i.
aaa# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME syslogd 266 root 5u IPv4 0xc1115924 0t0 UDP *:syslog sshd 409 root 3u IPv4 0xc1187de0 0t0 TCP *:ssh (LISTEN) sendmail 415 root 3u IPv4 0xc1187c24 0t0 TCP localhost:smtp (LISTEN) ntpd 449 _ntp 4u IPv4 0xc1115ec4 0t0 UDP host.domain.com:58832->anoter.host.domain.com:ntp ntpd 449 _ntp 6u IPv4 0xc1115654 0t0 UDP localhost:ntp tac_plus 464 root 0u IPv4 0xc1187a68 0t0 TCP *:tacacs (LISTEN) inetd 484 root 4u IPv4 0xc11152d0 0t0 UDP *:tftp sshd 25925 root 4u IPv4 0xc1187000 0t0 TCP host.domain.com:ssh->myworkstation.domain.com:2832 (ESTABLISHED) tac_plus 47739 root 2u IPv4 0xc12c4a68 0t0 TCP host.domain.com:tacacs->somerouter.domain.com:11980 (ESTABLISHED)
Как видно из листинга, команда вывела всех открытых сокетов в системе, а так же процессы, которые работают с ними.
У ключа -i есть несколько параметров, которые позволяют гибко определить критерии отбора нужных нам процессов. Вот эти самые полезные параметры:
[46][протокол][@имя_хоста|адрес_хоста][:имя_сервиса|порт]
4 или 6 — это версия протокола IP, соответственно IPv4 или IPv6;
протокол— поскольку с сетевыми портами работают лишь протоколы TCP и UDP, то данный параметр может принимать только такие значения;
имя_хоста, адрес_хоста, имя_сервиса, порт — с этими параметрами ясно из их названия.
Комбинируя данные параметры, можно без труда добиться нужных результатов.
Для примера, выборка процессов, которые работают с 49 TCP портом:
aaa# lsof -i TCP:49 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME tac_plus 464 root 0u IPv4 0xc1187a68 0t0 TCP *:tacacs (LISTEN)
Сетевые процессы, связанные с хостом desktop.domain.com:
server ~ # lsof -i@desktop.domain.com COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME ircd 1422 ircd 194u IPv4 226402187 TCP server.domain.com:ircd->desktop.domain.com:camp (ESTABLISHED) sshd 16770 root 3u IPv6 227791970 TCP server.domain.com:ssh->desktop.domain.com:svn (ESTABLISHED) sshd 17012 srn 3u IPv6 227791970 TCP server.domain.com:ssh->desktop.domain.com:svn (ESTABLISHED)
Для построения списка открытых портов системы можно передать вывод команды lsof на egrep:
aaa# lsof -i | egrep 'COMMAND|LISTEN|UDP' COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME syslogd 266 root 5u IPv4 0xc1115924 0t0 UDP *:syslog sshd 409 root 3u IPv4 0xc1187de0 0t0 TCP *:ssh (LISTEN) sendmail 415 root 3u IPv4 0xc1187c24 0t0 TCP localhost:smtp (LISTEN) ntpd 449 _ntp 4u IPv4 0xc1115ec4 0t0 UDP host.domain.com:58832->anoter.host.domain.com:ntp ntpd 449 _ntp 6u IPv4 0xc1115654 0t0 UDP localhost:ntp tac_plus 464 root 0u IPv4 0xc1187a68 0t0 TCP *:tacacs (LISTEN) inetd 484 root 4u IPv4 0xc11152d0 0t0 UDP *:tftp
Поскольку для протокола UDP отсутствует такое понятие, как «слушать порт (LISTEN)», то в выборку могут попасть не только открытые порты, а и некие соединения по данному протоколу.
Есть ещё пара ключей, которые могут быть безусловно полезны при работе с данной командой.
Во-первых, это ключ -n, который заставляет lsof не резолвить сетевые имена хостов, что делает вывод соединений быстрее (а на машинах с большим количеством соединений — значительно быстрее).
Во-вторых, ключ -t, который заставляет lsof вывести лишь список PID задействованных процессов. Данный список можно передать команде kill.
kill -s HUP `lsof -i:3128`
Более подробно об остальных возможностях команды lsof можно узнать из man.
Популярность: 4%
Похожие заметки
Защита служб, которые не поддерживают работу с SSLLittle Hint: Запуск Х приложений на удаленной машине
FreeBSD: SNMP для mrtg за 5 минут
Запускаем VNC на :0 display
ADSL и мнимые проблемы с Path MTU Discovery
P.S.
сериал Аватар Легенда об Аанге онлайн смотреть все сезоныДать объявление бесплатно без регистрации - работа водителем в Днепропетровске
Roman Shramko