Я довольно широко искал это, но не могу найти рабочий пример.
Моя цель - отслеживать TCP-трафик на определенном порту, чтобы видеть входящие соединения и записывать их в текстовый файл. Суть в том, что мне также нужна временная метка в каждой строке, чтобы точно показать, когда клиент подключился ко второй.
Я уже исчерпал netstat, nmap и tcptrack, но ни одна не поддерживает временную метку.
Я думал, что сценарий оболочки Linux может работать, если я отслеживаю определенный локальный порт и записываю текст в файл при установлении соединения, а затем просто объединяю дату в каждой строке.
Я играл с этим:
netstat -ano|grep 443|grep ESTABLISHED
а также это:
tcptrack -i eth0 port 443
но ни то, ни другое не соответствует моим потребностям, так как мне нужно время, в которое устанавливается соединение.
Если у вас есть какие-либо предложения или вы могли бы указать мне правильное направление, это было бы очень признательно.
Спасибо. :)
Ответы:
редактировать : я все еще получаю голоса за это лет спустя. Пожалуйста, не переходите к этому ответу, ответ, использованный
iptables
здесь, намного лучше, по моему мнению.или только
tcp-syn
, или толькоtcp-ack
(я думаю, что это так), в зависимости от того, что вам нужно.источник
-n
после tcpdump (man tcpdump: -n Не преобразовывать адреса (т.Для этого вы можете использовать поддержку iptables в ядре Linux. Положительным моментом является то, что для умеренной полезности не требуется никакого дополнительного программного обеспечения. Недостатком является то, что для настройки требуются привилегии root (но, учитывая, что вы говорите о порте 443, который является привилегированным портом, вам, вероятно, понадобятся привилегии root в большинстве решений).
Добавьте правило iptables что-то вроде:
(Отрегулируйте
-I INPUT
деталь по своему вкусу.)Когда правило срабатывает, ядро создает запись системного журнала. Например, с правилом ввода запись в журнале может выглядеть примерно так:
Затем вы можете использовать любой обычный инструмент для мониторинга журналов, чтобы сделать что-то полезное с этой информацией. Если ваша реализация системного журнала поддерживает это, вы можете даже направить их в отдельный файл журнала, эффективно выполняя ваше требование записать данные о соединении в файл с меткой времени во втором без дополнительного программного обеспечения.
Обратите внимание, что
LOG
цель - это не прекращающаяся цель, что означает, что любые правила, следующие за ней, все еще будут оцениваться, и пакет не будет ни отклонен, ни принят самим правилом LOG. Это делаетLOG
цель полезной также для отладки правил брандмауэра.Чтобы избежать заполнения вашего журнала, рассмотрите возможность использования
limit
модуля в сочетании с этим. Обратитесь к справочной странице iptables (8) за подробностями.источник
Микро-второе разрешение
По умолчанию утилита tcpdump сообщает время с микросекундным разрешением. Например:
покажет вывод, подобный следующему:
Смотрите tcpdump (8) для полного списка опций tcpdump, и pcap-filter (7) для полного синтаксиса фильтров, которые вы можете использовать.
источник
443 - это зашифрованный трафик, так что сложно так или иначе сделать трафик на этом порту:
ты можешь сделать
yum install ngrep или apt-get install ngrep
тогда беги
источник
Это также может потребоваться для мониторинга входящих и исходящих пакетов с других компьютеров.
(опция
-i
для упоминания сети, опция-c
для печати пакетов в консоли)источник
Вы можете использовать tcpdump или Wireshark.
источник
Если вам нужно постоянное решение, которое всегда будет отслеживать трафик на интересующих вас портах, я предлагаю использовать QoS (команда tc в linux). tc немного загадочный и недокументированный, поэтому я использую FireQoS для настройки QoS и netdata для мониторинга в реальном времени.
Проверьте это для получения дополнительной информации: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers
источник