【问题标题】:How to Listen on tcp port without it answering?如何在没有应答的情况下监听 tcp 端口?
【发布时间】:2021-01-25 07:51:30
【问题描述】:

我一直在用 C 实现一个数据包转发器,偶然发现了这个有趣的问题。

我注意到如果我用winsock 监听tcp 端口,它会在收到syn 时发回syn-ack。如果我不听,它会发送 rst-ack 以指示端口已关闭。我希望端口根本不会响应,因为我正在使用 winpcap 直接在接口上嗅探。

我的问题有什么解决方案或变通方法吗?我对 UDP 也有同样的问题,但当然打开端口修复它并防止 ICMP 主机无法访问。现在我找到了 TCP 的解决方案。

谢谢

【问题讨论】:

  • TCP 在两个对等点之间建立了一条双向链路,并且每一端都必须先 SYN 并 ACK 另一个 SYN,然后才能打开连接以供使用。另一方面,UDP 是一种即发即弃的协议,它不关心任何其他设备是否接收到。转发数据包与 TCP、UDP 或任何其他传输或更高级别的协议无关,所以我不确定为什么会出现问题。

标签: networking tcp winsock winsock2 syn


【解决方案1】:

如果你想在不建立连接的情况下转发数据包,那么最好使用 iptables 来设计一些规则。 TCP 是一种可靠的传输协议,这意味着如果你想接收数据包(它不关心你是想使用它还是只是转发),那么它必须通过三次握手来建立连接。

【讨论】:

  • TCP等传输协议是数据包的负载,网络协议不知道数据包负载是什么,所以数据包的转发与传输协议无关。数据包按网络协议地址转发。
  • Ron,即使我想执行端口转发?
  • 一个 tyChen,听起来不错,但我很乐意在 Windows 平台上用 C 语言编程
  • @Eran Nahshon 看来你还没有理解我和 Ron Maupin 的意思。没有连接是不可能转发的。
  • @EranNahshon,端口转发不是数据包转发。您正在混淆网络层。端口转发和NAPT有关系,但是包转发只是简单的路由,两者真的没什么关系,只是在WAN路由器上做NAT往往比较方便。路由器在没有 NAT 或 NAPT 的情况下可以很好地路由数据包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多