【问题标题】:Open tcp/udp ports with no socket打开没有套接字的 tcp/udp 端口
【发布时间】:2025-12-24 14:30:17
【问题描述】:

我已经开始使用 winpcap,并且遇到了一个有趣的 tcp/udp 端口​​情况。我写了一个数据包转发器,它嗅探接口并转发来自指定端口的数据包。我不打开端口,因为我直接从接口嗅探。问题是 tcp/ip 堆栈在关闭的 tcp 端口上回答 RST、ACK 和在关闭的 UDP 端口上无法访问的 ICMP 目的地。

我需要以关闭端口不会回答任何会打断对话的方式来解决这个问题。

有没有一种方法可以丢弃到达 tcp/ip 堆栈的数据包? 我可以禁用 RST、ACK 和目的地不可达的自动应答吗? 我可以监听不会在 SYN 数据包上重放 SYN ACK 的 tcp 吗?

希望我明白了,谢谢。

【问题讨论】:

    标签: c networking tcp network-programming winpcap


    【解决方案1】:

    我能想到的两个解决方案:

    • 不要使用您的 PC IP 地址,使用不同的 IP 地址,并实现一个小的 ARP 回复逻辑,这比试图阻止数据包到达操作系统更容易。
    • 使用 WinDivert 驱动程序https://www.reqrypt.org/windivert.html 我知道它可以使操作系统丢弃数据包,但不确定是否也包括 SYN 数据包。

    【讨论】:

    • 嗯,你认为我可以打开 tcp 端口,而不用在监听时发送 syn-ack 吗?我只希望端口无响应,不发送 rst-ack 或 syn-ack。
    • 你可以阻止它发送 syn-ack,但是你不能阻止它使用 socket api 发送 rst。您可能能够阻止它发送 rst 的唯一方法是使用驱动程序/防火墙,例如 WinDivert。