如何检测 libpcap 拒绝的连接?

问题描述 投票:0回答:2

我想使用 libpcap 检测系统中被拒绝的任何连接。

我尝试使用下一个过滤器来做到这一点:

"tcp[tcpflags] & (tcp-rst) == (tcp-rst)"

但是 REST 标志并不能确保连接被拒绝,它也可以指示连接刚刚关闭。

有办法做到吗?

c network-programming tcp libpcap
2个回答
0
投票

TCP 连接可能无法启动、主动拒绝或干脆忽略。

  • 启动失败意味着主机发出 ARP 或 NDP 请求以获取主机的 MAC 地址,但没有收到回复,因此 SYN 数据包甚至没有发送。
  • 主动拒绝包括TCP RST、ICMP目标端口不可达、ICMP目标网络不可达。
  • 忽略通常是由防火墙规则引起的,当您有 TCP SYN 且没有匹配的 TCP SYN-ACK 回复时,它会显示防火墙规则。

您明确要求“拒绝”,因此这意味着您需要添加

icmp-unreach
icmp6-destinationrunreach

我一般建议使用 Wireshark/Tshark 过滤器,而不是使用 tcpdump 过滤器,因为 pcap 过滤器只能检测“主动拒绝”,而不能检测“无响应/ TCP SYN 忽略”,另请参阅 https://www.wireshark .org/docs/dfref/t/tcp.html


0
投票

用它来调试由 icmp 回复引起的

Connection refused
错误:

tcpdump -nvi any icmp[icmptype] = icmp-unreach
© www.soinside.com 2019 - 2024. All rights reserved.