-n
中的选项tcpdump
很有用。有时我更喜欢查看 IP 地址,有时我更喜欢将 IP 地址解析为主机名。
但我从来不想将端口号翻译成“名称”。
我怎样才能始终将端口号显示为数字,即53
而不是domain
。
如果这是不可能的,我该如何修补tcpdump
以使端口号始终以数字形式显示?
tcpdump 4.9.3-1~deb10u2
我在 Debian 10 上使用。
答案1
-nn
Linux 附带的中可能有一个标志tcpdump
(该标志不可移植†;Centos Linux Stream 有 4.9.3,希望与 Debian 相同)以防止显示.22
为.ssh
,但这也会禁用主机名查找。所以您可能正在查看源代码补丁。
如果您查看源代码 (),该-n
标志可用于各种用途,addrtoname.c
因此最简单的事情可能是发明一个新标志,在处理发生的tcpdump.c
地方getopt
和其他地方获得对此的支持(有一个结构,但您可能可以如果你愿意的话,只需在全局中进行克鲁格int Flag_Myflag;
),然后addrtoname.c
修改端口转换,使其在存在自定义标志时不会发生(有很多不同的方式可以将其与-n
或-nn
或其他方式组合,具体取决于你想要的)。
if (Flag_Myflag) {
(void)snprintf(buf, sizeof(buf), "%d", port);
table->name = strdup(buf);
} else
table->name = strdup(sv->s_name);
缺点:您现在可以手动更新和修补您的自定义tcpdump
安全漏洞等,或不这样做,这有风险。
† 一位同事曾经试图让我输入 Linuxtcpdump
标志;他们不知道我的桌面系统是 OpenBSD。进展并不顺利。