禁用 OSX 内核空间 TCP 处理

禁用 OSX 内核空间 TCP 处理

我正在使用 Scapy 编写 TCP 的部分重新实现,用于学习目的。我的 TCP server.py 没有机会响应发送给它的 SYN 消息,因为内核会先响应它们(OSX 10.10.5)。我已阅读手册pf.conf页,但似乎没有选项可以创建一条规则,该规则会过滤来自内核空间但不来自用户空间的数据包(令人沮丧的是,Linux 似乎iptables确实提供了这样的选项,QUEUE)。

我尝试了以下pf规则,但它直接过滤了数据包(无论是来自内核还是我的应用程序)。我这样说的原因是,我在 wireshark 中看不到目标端口为 3000 的数据包。

pf 规则:

block drop quick on lo0 proto tcp from any to any port = 3000

用于生成SYN的nmap命令:

nmap 192.168.1.12 -p 3000

我怎样才能让内核不做任何事情就将 TCP 数据包传递到用户空间?

答案1

我的朋友:

目标机器和发送机器是否相同?如果是,则重新编写 nmap 以使用环回 IP 地址,如下所示:

nmap -P0 -sT 127.0.0.1 -p 3000

注意额外的选项。接下来,重新措辞 pf 规则并添加一条出口规则,如下所示:

pass in quick on lo0 tcp from any to any 
pass out quick on lo0 tcp from any to any 

如果可行,请像这样收紧 pf 规则:

pass in quick on lo0 tcp from 127.0.0.1 to 127.0.0.1
pass out quick on lo0 tcp from 127.0.0.1 to 127.0.0.1 

如果此方法不起作用,请检查 pf 以查看是否有任何数据包与这两条规则匹配。

希望这可以帮助。

F。

相关内容