Список активных * и прошлых * сетевых подключений

3035
Federico Poloni

В Linux я знаю, что могу перечислить активные сетевые соединения с помощью lsof -iили netstat. Однако, насколько я знаю, это только список соединений, которые в данный момент открыты .

Если процесс устанавливает короткое соединение, а затем завершает его (как, например, программа «звонит домой»), я бы пропустил его, если мне не удастся запустить именно lsofв этот момент. Есть ли способ получить список серверов, к которым я подключен? Например, инструмент, который записывает IP-адрес в файл при каждом открытии нового соединения в масштабе всей системы.

Постоянно открывать сетевой сниффер, такой как wireshark, для этой задачи кажется излишним.

0

3 ответа на вопрос

1
a CVn

Я не пробовал, но вы рассматривали возможность использования iptables с LOGцелью в цепочке вывода?

Что-то вроде следующего (не проверено, но раскрывает суть).

iptables -I OUTPUT ! -i lo -p tcp --syn -j LOG --log-prefix 'New TCP' iptables -I OUTPUT ! -i lo -p udp -m state --state NEW -j LOG --log-prefix 'New UDP' 

Это будет регистрировать один раз для каждого TCP-соединения и один раз для каждого нового сеанса UDP, исключая петлевой интерфейс, что, по-видимому, примерно то, что вы запрашиваете. Затем вы можете в grepсвоей системной логи узнать, после того, как были установлены исходящие соединения.

Тем не менее, он не будет (и я не думаю, что простые iptables могут) сказать вам, какое приложение инициировало соединение, и вы получите тонны журналов из этого, которые, скорее всего, будут бесполезны (потому что число законных соединений сделано наверняка затмит любую сделанную звонилку).

Это тоже хорошее предложение. Я не знаю, почему мне не пришло в голову использовать ведение журнала на уровне брандмауэра. Благодарю. Federico Poloni 11 лет назад 0
1
Gabor Garami

Если процесс устанавливает короткое соединение, а затем прерывает его (как, например, программа «звонит домой»)

Большинство из этих программ создает TCP-соединение, чтобы гарантировать, что информация поступит «домой». Если это так, то netstatкоманда будет вашим лучшим другом, потому что все закрытые TCP-соединения сохраняют состояние в течение небольшого или немного большего времени TIME_WAITи netstat --inet -nперечисляют эти соединения (и в настоящее время открытые тоже).

Если вам не повезло, и этот хитрый процесс использует UDP-соединение или вы хотите отслеживать трафик в течение более длительного периода времени, то вам придется отслеживать весь сетевой трафик машины с помощью таких инструментов, как TCPDump или IPTraf. IPTraf более прост, поскольку он записывает только IP-адреса и порты, TCPDump является более продвинутым инструментом (несмотря на свое название, он также может отслеживать трафик UDP и ICMP) и записывает весь сетевой трафик.

IPTraf выглядит отлично, спасибо! Federico Poloni 11 лет назад 0
-1
september

Вам нужно прослушать более 65000 портов. Только сетевой анализатор брандмауэра может это сделать. Просто настройте правильный фильтр (для новых запросов на подключение) для правил журнала сниффера или брандмауэра.