Есть ли программа, которая может регистрировать сетевой трафик по процессу и доменным именам?

for i in {1..5}; do php phpfiletoexecute.php; done

Это самая дурацкая версия; Имея дополнительную информацию, вы можете делать такие вещи, как проверять успешность каждого запуска, просматривать их результаты, если таковые имеются, и т. д.

3
16.09.2018, 17:56
3 ответа

Если у вас недавнее ядро ​​(предпочтительно не ниже 4.9, но, по-видимому, некоторые вещи работают на 4.2 ), то вы можете воспользоваться преимуществами новой dtrace возможности, позволяющей перехватывать все tcp connect()вызывает ядро ​​и показывает идентификатор процесса, удаленный IP-адрес и порт.

Так как опрос не выполняется, вы не пропустите ни одного короткоживущего -соединения. Из блога Брендана Грегга за 2016 год типичный вывод:

# tcpconnect
PID    COMM    IP SADDR            DADDR            DPORT
1479   telnet  4  127.0.0.1        127.0.0.1        23
1469   curl    4  10.201.219.236   54.245.105.25    80
1469   curl    4  10.201.219.236   54.67.101.145    80
1991   telnet  6  ::1              ::1              23
2015   ssh     6  fe80::2000:bff:fe82:3ac fe80::2000:bff:fe82:3ac 22

Дополнительные примеры находятся в bcc -tools package source . Встроенные пакеты для установки доступны для нескольких дистрибутивов , или вы можете следовать инструкциям по компиляции.

4
27.01.2020, 21:12

Вы можете использовать netstatдля отображения трафика tcp/ip вместе с PID и именем процесса, например:

netstat -pt

Чтобы посмотреть в прямом эфире, используйте watch -nс интервалом, например:

watch -n 2 netstat -pt

Чтобы собирать такую ​​информацию с течением времени, вы можете сохранить и запустить ее как скрипт bash:

sec=1
count=0
end=3600

echo > output.txt

while [ $count -lt $end ]; do
        netstat -pt | sed -e '1,2d' >> output.txt
        sleep $sec
        count=$((count+1))
done

Это будет запускать netstat -ptкаждую секунду в течение часа и направлять результаты в output.txt. Затем вы можете использовать:

awk '{ print $7 "\t" $5 }' output.txt 

, чтобы красиво напечатать отформатированное имя PID/процесса _и протокол веб-сайта :, разделенные табуляцией для каждой собранной строки.

3
27.01.2020, 21:12

На сетевом уровне, где tcpdumpвидит пакеты, подключение к пользовательскому процессу недоступно. Инструмент ssимеет опцию -pдля отображения списка процессов, связанных с сетевым подключением. Поскольку ssпоказывает информацию только в определенный момент времени, вам придется запускать ее часто, и вы все равно можете потерять информацию о коротких соединениях.

Чтобы узнать, что было передано, вы можете запустить tcpdumpи захватить все, позже вы можете отфильтровать захваченные пакеты по номерам локальных портов, которые вы получили из ss.

Это не даст вам прямой информации об используемых DNS-именах, поскольку подключения всегда осуществляются к IP-адресам. Но вы можете выполнить поиск DNS-запросов в захвате вашей сети, которые отвечают с IP-адресом используемого позже соединения, это позволит вам узнать используемые DNS-имена, если нет запросов на разные DNS-имена, которые используют один и тот же IP-адрес.

Если вы действительно хотите знать, что делает процесс, используйте strace. Вы увидите DNS-имена, отправленные распознавателю, а также все, что передается, даже для кратковременных соединений.

2
27.01.2020, 21:12

Теги

Похожие вопросы