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

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

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

3 ответа3

1

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

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

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

1

Я не пробовал, но вы рассматривали возможность использования 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 могут) сказать вам, какое приложение инициировало соединение, и вы получите тонны журналов из этого, которые, скорее всего, будут бесполезны (потому что число законных соединений сделано наверняка затмит любую сделанную звонилку).

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .