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

Aln*_*tak 2 domain-name-system tcpdump

此问题之后,我如何判断tcpdump对特定端口使用特定协议分析器?

我正在使用在端口 5053 上运行的测试服务器进行一些 DNS 开发,但我不知道如何判断tcpdump这真的是 DNS 流量。

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

bor*_*yer 6

tshark 是 Wireshark 包的一部分,它是纯文本的。

所以,tshark -d udp.port==5053,dns应该工作。


Dan*_*ley 5

有趣的问题。似乎应该可以通过以下选项访问它:

-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).
Run Code Online (Sandbox Code Playgroud)

除了“域”显然不是一个有效的选项。我想如果您愿意的话,可以对 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;
Run Code Online (Sandbox Code Playgroud)