Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №4 (FAQ).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
406.02 Кб
Скачать

6.3.3. Lsof(1)

Это тоже очень полезная программа, которая умеет рассказывать об открытых сокетах, сетевых соединениях и открытых файлах. Данная программа не входит в состав BSD, а доступна исключительно ввиде стороннего продукта (порта или пакета).

С опцией -i она может рассказать об открытых интернет-соединениях:

$ lsof -i -n | head

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

syslogd 306 root 5u IPv4 0xc18cc708 0t0 UDP *:syslog

ntpd 439 root 4u IPv4 0xc18cc654 0t0 UDP *:ntp

ntpd 439 root 5u IPv4 0xc18cc5a0 0t0 UDP 192.168.0.4:ntp

ntpd 439 root 6u IPv4 0xc18cc4ec 0t0 UDP 192.168.0.6:ntp

ntpd 439 root 7u IPv4 0xc18cc438 0t0 UDP 127.0.0.1:ntp

sshd 470 root 3u IPv4 0xc18fade0 0t0 TCP *:ssh (LISTEN)

sendmail 476 root 4u IPv4 0xc18fac24 0t0 TCP 127.0.0.1:smtp (LISTEN)

mysqld 570 mysql 3u IPv4 0xc18fa8ac 0t0 TCP *:3306 (LISTEN)

mysqld 570 mysql 3u IPv4 0xc18fa8ac 0t0 TCP *:3306 (LISTEN)

Здесь в скобках показано состояние соединения TCP (расшифровку см. выше). Сделав поиск по слову ESTABLISHED мы можем узнать соединения, по которым в данный момент могут передаваться данные:

$ lsof -i -n | grep ESTABLISHED | head

sshd 53540 root 4u IPv4 0xc28ae1bc 0t0 TCP xxx.yyy.zzz.xyz:ssh->xxx.yyy.zzz.zyx:52954 (ESTABLISHED)

sshd 53542 emin 4u IPv4 0xc28ae1bc 0t0 TCP xxx.yyy.zzz.xyz:ssh->xxx.yyy.zzz.zyx:52954 (ESTABLISHED)

httpd 47448 www 66u IPv4 0xc1f296f0 0t0 TCP xxx.yyy.zzz.xyz:http->**************:31825 (ESTABLISHED)

httpd 51286 www 66u IPv4 0xc2407378 0t0 TCP xxx.yyy.zzz.xyz:http->***********:2381 (ESTABLISHED)

httpd 51314 www 66u IPv4 0xc21c3534 0t0 TCP xxx.yyy.zzz.xyz:http->*************:11009 (ESTABLISHED)

httpd 51316 www 66u IPv4 0xc1b6dde0 0t0 TCP xxx.yyy.zzz.xyz:http->************:3664 (ESTABLISHED)

httpd 52426 www 66u IPv4 0xc2407a68 0t0 TCP xxx.yyy.zzz.xyz:http->************:10555 (ESTABLISHED)

httpd 53595 www 66u IPv4 0xc208ec24 0t0 TCP xxx.yyy.zzz.xyz:http->*************:55420 (ESTABLISHED)

httpd 53666 www 66u IPv4 0xc43adde0 0t0 TCP xxx.yyy.zzz.xyz:http->**************:3339 (ESTABLISHED)

httpd 53778 www 66u IPv4 0xc1fa8534 0t0 TCP xxx.yyy.zzz.xyz:http->*************:33735 (ESTABLISHED)

Следующий скрипт отслеживает количество соединений с web-сервером apache, и печатает статистику, по которой можно установить с какого IP пришло слишком много запросов.

#!/bin/sh

while :

do

echo "========== `/bin/date` =========="

/usr/local/bin/lsof -i -n |\

/usr/bin/awk '/^httpd.*ESTABLISHED/{print $9}' |\

/usr/bin/sed 's/.*->\([0-9.]*\):.*/\1/' |\

/usr/bin/sort | /usr/bin/uniq -c | /usr/bin/sort -n -k1,1

/bin/sleep 5

done

Ту же задачу, впрочем, можно решить и при помощи команды netstat(1):

#!/bin/sh

while :

do

echo "========== `/bin/date` =========="

/usr/bin/netstat -n | /usr/bin/awk '/62\.117\.108\.4\.80 .*ESTABLISHED/{print $5}' |\

/usr/bin/sed 's/\.[0-9]*$//' |\

/usr/bin/sort | /usr/bin/uniq -c | /usr/bin/sort -n -k1,1

/bin/sleep 5

done

Без опции -i программа lsof(1) выводит информацию об открытых файлах. Вывод её несколько удобнее, чем у программы fstat(1), так как включает в себя не только номера inod'ов, но и имена файлов, которые она берёт из кеша ядра.