четверг, 3 сентября 2009 г.

Кто сожрал трафик или просмотр tcp соединений под linux'ом.

Еще в далекие темный времена использования неправильных ОС, частенько возникала проблема пропажи трафика, особенно остро встающая при подключении к интернет через gprs. Под windows это может быть связано с вирусами, но могут и какие-то совершенно честные приложения внезапно надумать обновиться. Недавно столкнулся с этим же под линуксом и вскоре нашел решение.

Заключается оно в использовании встроенной утилиты netstat.
Все делается проще некуда, команда:

netstat -tp

выведет нам примерно такую табличку:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 gprs-internet:52725 buddychat-m02b ESTABLISHED 5101/pidgin
tcp 0 0 gprs-internet:46308 sablino:afs3-f ESTABLISHED 6364/firefox
tcp 0 0 gprs-internet:58030 bos-m053b-sdr2 ESTABLISHED 5101/pidgin
tcp 0 0 gprs-internet:51400 ww-in-f125.goo ESTABLISHED 5101/pidgin

Наибольший интерес представляет последний столбец(добавляемый ключом -p), который позволяет вычислить нарушителя.
Также можно добавить ключ -c и тогда информацию будет обновляться раз в секунду.

3 комментария:

Unknown комментирует...

Очень здорово, а как увидеть сколько конкретно метров на себя тянет каждое соединение? В мане написано, что за это отвечают следующие столбцы:

Recv-Q
The count of bytes not copied by the user program connected to this
socket.

Send-Q
The count of bytes not acknowledged by the remote host.

Но у Вас на скрине в этих графах нули, а у меня тоже почти все нули, за исключением нескольких позиций, в которых стоит 38. Хотя разумеется там не 38 байт.

triklozoid комментирует...

Столбцы, мне кажется, не совсем за это отвечают.
В вольном переводе:
Recv-Q
Количество баййт, не скопированных программой присоединенной к сокету.
Send-Q
Количество байт не распознанных удаленным хостом.
Для просмотра количества передаваемых данных можно использовать утилиту iftop. Есть в репозитории(ubuntu), весит мало, работает просто: sudo iftop -i ppp0
В принципе, ее можно даже рекомендовать вместо netstat'a для этих целей, но мне и того вполне хватило.

Unknown комментирует...

Прошу прощения, перевел действительно неверно, ибо торопился. Однако проблемы это не решает. Ифтоп не показывает имя программы, которая конектится, а в Вашем методе не хватает собственно размера трафика, может написать скрипт, который бы совмещал приятное с полезным:)