我正在尝试使用 tcpdump 来探索我的计算机上的内容与万维网上的谁进行通信。
到目前为止我已经取得了以下进展:
lan_hosts="(hosts || to || exclude)"
local_hosts="(127.0.0.1 || ips_of_my_nics || localhost || local_hostname)"
excused_local_ports="(ssh || https || domain || $(netstat -ap | egrep -h '/(processes|I_dont|want|to_see|traffic_of)' | tr -s ' ' | cut -d ' ' -f 4 | rev | cut -d ':' -sf 1 | rev | sort | sed ':a; N; $!ba; s/\n/ \|\| /g'))"
tcpdump -vi any "ip && ! icmp && ! arp && (src ! $local_hosts || dst ! $local_hosts) && (src $local_hosts || dst $local_hosts) && (src ! $local_hosts || src port ! $excused_local_ports) && (dst ! $local_hosts || dst port ! $excused_local_ports) && host ! $lan_hosts"
现在我在这里发布这个问题的原因是:我不明白为什么/这些数据包仍然出现在输出中:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
14:49:30.660109 IP (tos 0x0, ttl 64, id 23067, offset 0, flags [DF], proto UDP (17), length 71)
localhost.38976 > localhost.domain: 26002+ [1au] A? lan_host.lan. (43)
14:49:30.686174 IP (tos 0x0, ttl 64, id 23110, offset 0, flags [DF], proto UDP (17), length 80)
localhost.47181 > localhost.domain: 45895+ [1au] PTR? some_ip.in-addr.arpa. (52)
14:49:30.686219 IP (tos 0x0, ttl 64, id 2440, offset 0, flags [DF], proto UDP (17), length 103)
localhost.domain > localhost.47181: 45895 1/0/1 some_ip.in-addr.arpa. PTR localhost. (75)
我认为(src ! $local_hosts || dst ! $local_hosts)
我的过滤器声明的部分(仅使用 && 逻辑连接到其他过滤器部分)应该排除这些?即使我在过滤器中没有该部分,它们也应该再次被排除,因为我的变量domain
中包含了。excused_local_ports
让我们稍微解释一下过滤器声明,并尝试解释一下我想要通过每个部分实现的目标:
ip
-> 只查看 ipv4 数据包,因为这台机器没有到互联网的 ipv6 路径,所以我这里不关心 ipv6。! icmp
-> 不关心 ping 请求/回复和其他 icmp 路由元数据。! arp
-> 过滤掉地址解析协议数据包(src ! $local_hosts || dst ! $local_hosts)
-> 隐藏本地主机自发通信的数据包(src $local_hosts || dst $local_hosts)
-> 隐藏来自其他主机的广播(src ! $local_hosts || src port ! $excused_local_ports)
-> 隐藏我的主机从我现在不想查看的程序的一个端口发送的数据包。(dst ! $local_hosts || dst port ! $excused_local_ports)
-> 隐藏我的主机在我现在不想查看的程序的某个端口上收到的数据包。(host ! $lan_hosts)
-> 隐藏与定义主机的通信