【问题标题】:TCP three way handshake failsTCP 三向握手失败
【发布时间】:2012-04-04 07:35:00
【问题描述】:

我有一个 C++ 应用程序,它接受 TCP 连接,然后读取发送给它的流量。在我将其移至新机器之前,它一直运行良好。似乎 winsock 从不接受入站 tcp 连接。在我的代码中,它永远不会从 select 语句中返回。我可以使用 netstat/tcpview 看到应用程序正在侦听端口 14005。

如果我只是在本地远程登录,我可以连接到这个端口。但是,当有人尝试通过外部 IP 地址连接时,TCP 3 方式的握手永远不会完成。我可以在wireshark 中看到入站SYN 数据包。它会转到正确的端口 14005。但是我的系统从不发回 SYN-ACK。这只是winsock应该处理的事情吗?这台机器确实有多个 NIC 卡,但我与 INADDR_ANY 绑定,所以这无关紧要。有什么方法可以让我更深入地了解为什么这种握手永远不会发生?

【问题讨论】:

  • 您检查防火墙设置了吗?听起来像是在运行 Windows 防火墙。
  • 听起来像是防火墙问题。防火墙设置是什么?
  • 是的,我确实检查过了。 windows防火墙已关闭,所以我在那里没问题。我也没有在机器上看到任何其他防火墙软件。可能有什么东西漏掉了,但我到处找。
  • 所以如果有软件防火墙,我通常会看到一个 SYN 数据包?如果有硬件防火墙,它们会让 SYN 数据包通过吗?

标签: c++ tcp winsock


【解决方案1】:

根据深入挖掘的方法:无非是 wireshark / tshark(你已经使用了,但是如果你想玩数据包,看看 scapy)

如果你减轻头痛会发生什么 - 只使用一个网卡和网络,将客户端放在同一个网络上(即,没有路由器或智能交换机之间),(最后的手段)禁用不需要的网络服务。

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2016-03-22
    • 2014-04-06
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多