继这个问题,我怎样才能知道tcpdump
要对特定端口使用特定的协议分析器?
我正在使用在端口 5053 上运行的测试服务器进行一些 DNS 开发,但我不知道如何假装tcpdump
这真的是 DNS 流量。
我无法使用 wireshark——数据包没有经过带有 GUI 的机器。
答案1
tshark 是 Wireshark 包的一部分,纯文本。
因此,tshark -d udp.port==5053,dns
应该可以工作。
答案2
有趣的问题。似乎应该可以通过以下选项访问:
-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;
答案3
可能对回答您的问题没有明确的帮助,但是您不需要 GUI 来运行 wireshark。
通过 SSH 隧道传输的 X11 可让您远程运行整个应用程序。它可与 cygwin-x 或 openssh 配合使用,具体取决于您在桌面上使用 Windows 还是 Linux。
编辑:grawity是正确的,它不是端口转发。
答案4
或者,您可以在两台主机之间放置一台 GUI 机器,然后只在两个接口之间进行桥接。我为此目的自己建造了一台微型计算机,它有助于调试无法使用 wireshark 的各种安装(例如路由器)