Назад | Перейти на главную страницу

Изменить протокол, связанный с портом в tcpdump?

Следуя из этот вопрос, как я могу сказать tcpdump использовать конкретный анализатор протокола для конкретного порта?

Я занимаюсь разработкой DNS, используя тестовый сервер, работающий на порту 5053, но я не могу понять, как определить tcpdump сделать вид, что это действительно DNS-трафик.

Я не могу использовать wirehark - пакеты не проходят мимо машины с графическим интерфейсом.

tshark, часть пакета Wireshark, поддерживает только текст.

Так, tshark -d udp.port==5053,dns должно сработать.

Интересный вопрос. Кажется, что он должен быть доступен с опцией:

-T  Force  packets  selected  by  "expression" to be interpreted the
    specified type.  Currently known  types  are  aodv  (Ad-hoc  On-
    demand Distance Vector protocol), cnfp (Cisco NetFlow protocol),
    rpc (Remote Procedure Call), rtp (Real-Time Applications  proto-
    col), rtcp (Real-Time Applications control protocol), snmp (Sim-
    ple Network Management Protocol), tftp  (Trivial  File  Transfer
    Protocol),  vat  (Visual  Audio Tool), and wb (distributed White
    Board).

За исключением того, что «домен» явно не подходит. Я полагаю, что это возможно с небольшой поправкой в ​​исходный код tcpdump, если вы были к этому склонны.

Обновить

Вот так. Используйте на свой риск:

diff -ru tcpdump-3.9.8/interface.h tcpdump-3.9.8_modified/interface.h
--- tcpdump-3.9.8/interface.h   2007-06-14 02:03:20.000000000 +0100
+++ tcpdump-3.9.8_modified/interface.h  2009-07-27 19:40:55.831913794 +0100
@@ -74,6 +74,7 @@
 #define PT_CNFP                7       /* Cisco NetFlow protocol */
 #define PT_TFTP                8       /* trivial file transfer protocol */
 #define PT_AODV                9       /* Ad-hoc On-demand Distance Vector Protocol */
+#define PT_DOMAIN              10      /* Domain Name Service */

 #ifndef min
 #define min(a,b) ((a)>(b)?(b):(a))
diff -ru tcpdump-3.9.8/print-udp.c tcpdump-3.9.8_modified/print-udp.c
--- tcpdump-3.9.8/print-udp.c   2007-06-14 02:03:21.000000000 +0100
+++ tcpdump-3.9.8_modified/print-udp.c  2009-07-27 19:39:13.893442797 +0100
@@ -520,6 +520,11 @@
                        tftp_print(cp, length);
                        break;

+               case PT_DOMAIN:
+                       udpipaddr_print(ip, sport, dport);
+                       ns_print((const u_char *)(up + 1), length, 0);
+                       break;
+
                case PT_AODV:
                        udpipaddr_print(ip, sport, dport);
                        aodv_print((const u_char *)(up + 1), length,
diff -ru tcpdump-3.9.8/tcpdump.c tcpdump-3.9.8_modified/tcpdump.c
--- tcpdump-3.9.8/tcpdump.c     2007-09-26 02:59:54.000000000 +0100
+++ tcpdump-3.9.8_modified/tcpdump.c    2009-07-27 19:27:40.199449150 +0100
@@ -718,6 +718,8 @@
                                packettype = PT_TFTP;
                        else if (strcasecmp(optarg, "aodv") == 0)
                                packettype = PT_AODV;
+                       else if (strcasecmp(optarg, "domain") == 0)
+                               packettype = PT_DOMAIN;
                        else
                                error("unknown packet type `%s'", optarg);
                        break;

может быть явно не полезен при ответе на ваш вопрос, но вам не нужен графический интерфейс для запуска wirehark.

X11, туннелированный через SSH, позволит вам запускать полное приложение удаленно. Он хорошо работает с cygwin-x или openssh, в зависимости от того, используете ли вы Windows или Linux на своем рабочем столе.

отредактировал: grawity права, это не переадресация портов.

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