как заставить tcpdump отображать ip и номер порта, но не имя хоста и протокол

42

Я использую tcpdump для некоторых тестов, я хочу увидеть IP и номер порта, но вывод tcpdump похож на

IP pl1snu.koren.kr.http > kitch.pl.sophia.inria.fr.dnp: Flags [P.], seq 54:72, ack 1, win 5792, length 18

он показывает только имя хоста и протокол для http, легко узнать, что это 80, но для dnp мне нужно искать

так можно ли заставить tcpdump отображать ip и номер порта, но не имя хоста и протокол, если так, то как? Благодарность

misteryes
источник

Ответы:

44

Добавьте -nк своей tcpdumpкомандной строке.

Из справочной страницы tcpdump :

-n Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.

Также следует отметить, что в Fedora (и, возможно, других производных: RHEL, CentOS и т. Д.) Они исправили исходную версию tcpdump, чтобы включить отдельную опцию -nnдля удаления номеров портов. Из справочной страницы :

-n     Don't convert host addresses to names.   This  can  be  used  to
              avoid DNS lookups.

-nn    Don't convert protocol and port numbers etc. to names either.
heavyd
источник
номер порта по-прежнему преобразуется в имя протокола с помощью-n
misteryes
"номер порта по-прежнему преобразуется в имя протокола с использованием -n" Не, например, с tcpdump 4.1.1, который поставляется с OS X Mountain Lion или с tcpdump, созданным из верхней части транка Git tcpdump.org. В какой версии tcpdump вы видите -n не подавлять преобразование номеров портов в имена протоколов?
5

Я использую -nnпараметр.

-nnНе разрешайте имена хостов или портов.

Запустите это как:

tcpdump -nn 
ATMC
источник
2

-nработает только для имен хостов, но не работает для номеров портов. -nnделает трюк для обоих. Это работает tcpdump версии 4.5.1 на Fedora 20 GNU / Linux. Пониженный ответ @ATMc является единственно правильным. К сожалению, я не могу ни объявить это, ни написать комментарий под ним из-за низкой кармы.

Адам Куркевич
источник
1

Я думаю, что лучший подход это:

sudo tcpdump -ni any

Шаги для тестирования:

  1. Откройте консоль и введите:

    sudo nc -l -p 6666
    
  2. Откройте другую консоль и введите:

    sudo tcpdump -ni any
    

    Если вывод слишком подробный, вы можете отфильтровать его ( | grep -v "patter1n|pattern2")

  3. Откройте третью консоль и введите:

    telnet localhost 6666
    

Ожидаемый результат:

10:37:13.770997 IP 127.0.0.1.56920 > 127.0.0.1.443: Flags [S], seq 2822288041, win 43690, options [mss 65495,sackOK,TS val 1028779 ecr 0,nop,wscale 7], length 0

Если вы используете, sudo tcpdump -i anyвы увидите что-то вроде этого:

10:38:22.106022 IP localhost.56924 > localhost.https: Flags [S], seq 3147104744, win 43690, options [mss 65495,sackOK,TS val 1045863 ecr 0,nop,wscale 7], length 0
Хавьер
источник
1
Это то же самое, что и другой ответ - в -i anyэтом нет необходимости, если вы хотите подавить преобразование адреса / порта в имя, важно только -nэто.
-2
tcpdump -i eth0 -p -nn | grep "IP" | awk '{print$3 ,$4 ,$5}' | sed 's/://'
скоро
источник
1
я не понимаю
Pierre.Vriens
1
Хотя в вопросе говорится «отображать ip и номер порта, но не имя хоста и протокол», я сомневаюсь, что это означает «отображать ip и номер порта, но не любую другую информацию». (Я могу ошибаться, но, похоже, никто другой не интерпретировал вопрос так, как вы.) Таким образом, ваш ответ сводится к двум частям: (1) использование  -nnдля отображения таких служб, как «http» и «dnp», в качестве порта число вместо имени (которое было представлено в трех предыдущих ответах), и (2) используйте  awkдля отбрасывания данных о содержимом пакета (что, вероятно, нежелательно).
Скотт