为什么我无法发送这个IP数据包?

2024-04-12

我正在尝试使用 C# 发送 IP 数据包。

    destAddress = IPAddress.Parse("192.168.0.198"),
    destPort = 80;

    // Create a raw socket to send this packet
    rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

    // Bind the socket to the interface specified
    IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.0.140"),0);
    rawSocket.Bind(iep);

    // Set the HeaderIncluded option since we include the IP header
    rawSocket.SetSocketOption( socketLevel, SocketOptionName.HeaderIncluded, 1 );

    // Send the packet!
    int rc = rawSocket.SendTo(builtPacket, new IPEndPoint(destAddress, destPort));
    Console.WriteLine("sent {0} bytes to {1}", rc, destAddress.ToString());

builtPacket的内容如下所示。这是一个包含 TCP SYN 数据包的 IP 数据包(我想这就是我创建的)。

45 00 00 28 00 00 00 00 02 06 36 6E C0 A8 00 8C

C0 A8 00 C6 14 1E 00 50 00 00 00 00 00 00 00 00

05 02 FF FF E6 4F 00 00

输出是:

sent 40 bytes to 192.168.0.198

问题是我在 Wireshark 跟踪中没有看到任何内容。好像数据在堆栈中的位置不够远,Wireshark 无法看到?如果我使用浏览器连接到 192.168.0.198,Wireshark 会显示所有数据包,但当我尝试使用上述代码和数据发送数据包时,不会显示任何内容。

我的配置:

  • 我以管理员身份运行,所以这不是权限问题。

  • Windows 7(不在虚拟机中运行)

  • 仅无线连接(IP 配置报告其 IP 为 192.168.0.140)

我究竟做错了什么?

我确信奥卡姆剃刀适用于此,但我已经研究了几个小时,但无法找出问题所在。


这个问题 https://stackoverflow.com/q/7533205/715075, 由 MSDN 支持 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx#Limitations_on_Raw_Sockets,声称 Windows(XP SP 2 到 7)不再允许使用原始套接字传输 TCP 数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法发送这个IP数据包? 的相关文章

随机推荐