Следуя из этот вопрос, как я могу сказать 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 не подходит (например, маршрутизаторы)