2

我正在做一个涉及 USB 设备的项目,我们将通过它接收来自远程 pc 的 ip 数据包。我们为远程 pc 分配其 IP 地址。我一直在尝试通过几种方法发送原始 ip 数据包:

1 - 原始套接字:ping 工作正常,发送 tcp 问题

2 - tun/tap W32:我设法让这个工作足以发送 ping 并将 ping 返回到 phy 以太网设备,但无法使用驱动程序 guid 上的 ReadFile(...) 读取它们。

3 - winpcap:ping 正常,出线 tcp 出现在 wireshark 上(所以我假设它正在离开电脑),但我从来没有得到我的 syn 的 ack。我还担心如果我确实得到了一个 ack,windows TCP 堆栈会发送第一个。

我们的目标是实现从客户端 PC 到网络的透明传输。客户端 <-包装的 ip 数据包-> [设备] <-包装的 ip 数据包-> WinPC <- IP -> IpNetwork

我可能会犯这个错误,似乎这应该更容易。

我意识到 windows 可能不是理想的操作系统,但是我无法控制操作系统。

提前致谢

4

1 回答 1

1

修复了我的 TCP Syn 数据包未得到确认的问题,结果是我在计算 TCP 标头校验和时忘记包含伪标头。现在看起来 tcp 握手已完成,所以我称这个问题已解决。如果有人想推荐一种更好的方法来实现这一点,请随时回复。现在看起来我们将使用 winpcap 方法。

更新:为了在没有 Windows 不断 RST'ing tcp 连接的情况下工作,您必须在要发送数据包的适配器上启用 Internet 连接共享(ICS)。除此之外,这最终为我们工作。

于 2010-11-18T22:43:47.967 回答