在tcpdump中改变与端口相关的协议?

继续从这个问题 ,我怎么能告诉tcpdump使用特定的协议分析器的特定端口?

我正在使用在端口5053上运行的testing服务器进行一些DNS开发,但我无法弄清楚如何告诉tcpdump假装这是真正的DNSstream量。

我不能使用wireshark – 数据包没有通过一台有GUI的机器。

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; 

在回答你的问题时可能没有明确的帮助,但是你不需要GUI来运行wireshark。

通过SSH隧道的X11将允许您远程运行完整的应用程序。 它适用于cygwin-x或openssh,这取决于你在桌面上使用windows还是linux。

编辑:grawity是正确的,它没有端口转发。

或者你可以在两台主机之间放置一台GUI机器,只是在两个接口之间进行桥接。 为了这个目的,我build立了自己的一台小型计算机,这有助于debugging各种不同于wireshark的安装(即路由器)