我尝试使用酶联免疫吸附试验(“netcat 的经过极大改进的重新实现”)来与朋友聊天(最终想要发送一个大文件,但我知道一旦我让聊天正常工作,我就可以让它工作)。
我们都有 Windows。
我输入:
ncat -l 3333
我让他输入:
ncat [my public IP] 3333
我这边什么也没发生,而他则以“Ncat:。”完成并返回提示。
我不知道该怎么做才能解决这个问题,因此我决定趁他忙的时候,在我的两台笔记本电脑上测试一下(一台安装 Windows 系统,另一台安装 Linux 系统,不确定这是否有关系)。
我发现了相同的结果(“Ncat:。”然后返回提示)仅有的当我发出
ncat -l 3333
来自Linux和
ncat [my public IP] 3333
来自 Windows。
聊天/文件传输做过工作就是从 Windows 监听,ncat [my public IP] 3333
从 Linux 执行。
知道为什么会发生这种情况吗?我该怎么做才能解决它?
答案1
检查路径上没有防火墙(要在 Wireshark 中检查,请验证 TCP SYN 数据包是否到达侦听实例),并检查端口转发是否正确设置(如果您通过防火墙或家用路由器访问互联网)。如果您没有收到 TCP SYN 数据包,请返回原始计算机,直到看到它停止的位置。如果您看到 TCP SYN 数据包传入,然后传出 TCP SYN/ACK 数据包,请确保该数据包到达原始节点,并且它以 TCP ACK 进行响应。
基于它在从 Windows 监听并从 Linux 进入时可以正常工作的事实,我将检查 Linux 和 Windows 上的防火墙的个人防火墙设置,看看它们是否配置不同。确保允许正在监听的端口(在本例中为 3333)上的传入流量。
Linux 和 Windows 之间实际存在的 Netcat 的一个区别是,Windows 中有一个 -L 标志,它会导致关闭后持续监听。这可能与此问题无关,但我认为值得一提。
答案2
因此,您帖子的最后一部分说,只有当您从 Windows 监听并从 Linux 运行客户端时,它才能在本地工作。
您的 Linux 防火墙(最有可能是 ufw - 您使用的是 Ubuntu 还是其变体?)很可能设置为允许传出并拒绝传入,除非它由您自己的传出连接建立。不知何故,您的 Windows 防火墙很高兴您正在使用 ncat 进行监听,因此它只是让传入流量通过。
在 Linux 中运行:sudo systemctl status ufw
如果 ufw 已启动,则运行:sudo ufw allow 3333
然后尝试从 Linux 监听端口 3333,看看是否有效。使用 ncat 完成后,不要忘记拒绝端口 3333 - 语法相同,但使用拒绝而不是允许。
在第一种情况下,您的朋友无法连接到您的计算机,由于您的 Windows 计算机可以通过本地网络侦听并成功启动,因此几乎可以保证您计算机上的端口 3333 不会转发到您的路由器。当您的朋友尝试ncat
连接到您的 IP 时,他是在请求来自您的路由器的服务 - 而不是来自您的计算机。
如果您登录路由器管理界面,应该有一个端口转发/触发选项。这可能在高级设置中。祝您好运,如果您还有其他问题,请告诉我们。
PS. 如果您希望通过互联网与您的朋友合作,我建议您在概念验证后将其关闭。如果您想继续将计算机的端口暴露给万维网以进行 ncat 聊天,那么您应该将 ssl 与 ncat 结合使用,并且应该监视端口活动。