当数据包通过热点传输时,为什么 Linux 不将数据传递给应用程序?

当数据包通过热点传输时,为什么 Linux 不将数据传递给应用程序?

我的目标是使用 MITM 代理拦截流量。为此,我将笔记本电脑配置为承载 Wi-Fi 热点,连接智能手机,启动代理,并将智能手机配置为在此 Wi-Fi 网络上使用笔记本电脑作为代理。

主机 IP 为10.42.0.1,客户端为10.42.0.2。代理正在侦听端口 8080,任何接口。它正确显示在 中,netstat我可以netcat从 localhost 访问它。Android 手机配置为通过10.42.0.1端口 8080 进行代理。

我可以通过电话 ping 10.42.0.1;在 Wireshark 中,我可以看到回显请求传入,响应传出。

但是,当手机发送 TCP 或 UDP 数据包时,系统不会响应。当使用 UDP 上的 netcat 监听热点并从手机发送 UDP 数据时,数据不会传送到 netcat。我可以在 Wireshark 中看到包含数据的数据包,但终端保持空白。当在 TCP 上监听时,我可以在 Wireshark 中看到来自手机的 SYN 数据包,但从未确认(没有 SYN+ACK 响应)。

热点 ( 10.42.0.1) 明显有 ARP,路由返回或 ICMP 回显响应不会发出。主机未安装防火墙。重启后问题仍然存在。

可能是什么问题呢?

答案1

在写这个问题的时候,我意识到,虽然我知道它不可能是防火墙,因为我没有安装防火墙,也不可能是 iptables,因为它们在重启后不会继续存在,但我意识到我实际上并没有检查没有设置 iptables 规则。

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
DROP       all  --  anywhere             anywhere             state INVALID
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     udp  --  anywhere             anywhere             udp dpt:isakmp
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8528

事实证明,某些东西(可能是 NetworkManager 以其无穷的智慧)决定为我们添加一些规则,并意外地提供了防火墙。

一种解决方法是取消一些规则并重置默认策略:

# iptables -L --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
5    DROP       all  --  anywhere             anywhere             state INVALID
# iptables -D INPUT 5
# iptables --policy INPUT ACCEPT

我在 NetworkManager 文档甚至源代码中都找不到任何关于此内容的引用。我不知道这个端口 8528 是什么,它似乎默认允许(它没有在任何地方注册或引用),我无法快速找到调用 iptables 的相关代码,或者找到任何相关设置来阻止它对连接进行防火墙保护。也许 NetworkManager 调用了其他随后安装它的软件?

相关内容