更改 tcpdump 中与端口关联的协议?

更改 tcpdump 中与端口关联的协议?

这个问题,我怎样才能知道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 的各种安装(例如路由器)

相关内容