用 C# 发送原始 IP 数据包,以太网层之上的所有内容

发布于 2024-11-01 02:12:50 字数 706 浏览 5 评论 0原文

我不想修改帧的以太网部分,但我需要修改帧的 IP 数据包和数据部分。

我尝试发送原始帧,但它仍然包含 IP 信息。我基本上需要发送一个帧而不定义端点,除了我发送的位之外。

这是我得到的:

Socket s = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw);
EndPoint ep = new IPEndPoint(IPAddress.Parse("205.188.100.58"),80);
s.SendTo(GetBytes(""),ep); //im sending nothing, so i expect the frame to just have ethernet stuff
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, false);

我的问题: 使用 SendTo 添加帧的 IP 部分,我不希望这样,因为我想欺骗源 IP。使用“发送”会崩溃,因为它说我需要指定一个端点。有什么建议吗?我只想发送一个数据包并自己定义IP部分和数据部分。

注意:不,我不是在进行 DOS 攻击,我需要这个来合法使用!

我知道如何定义 IP 部分,这只是实际发送数据而不生成 IP 部分的问题。

I don't want to modify the ethernet portions of the frame, but I need to modify the IP packet and the data portion of the frame.

I try sending a raw frame and it still puts in the IP information. I basically need to send a frame without defining the endpoint except in the bits I'm sending.

Here's what I got:

Socket s = new Socket(AddressFamily.Unspecified, SocketType.Raw, ProtocolType.Raw);
EndPoint ep = new IPEndPoint(IPAddress.Parse("205.188.100.58"),80);
s.SendTo(GetBytes(""),ep); //im sending nothing, so i expect the frame to just have ethernet stuff
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, false);

My question:
Using SendTo adds the IP portion of the frame, I don't want that as I want to spoof the source IP. Using "Send" will crash because it says I need to specify an endpoint. Any suggestions on what to do? I just want to send a packet and define the IP section and data section myself.

Note: No I'm not making a DOS attack, I need this for a legitimate use!

I know how to define the IP portion, its just a matter of actually sending the data without a generated IP portion.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

来日方长 2024-11-08 02:12:50

您的问题在这里得到了很好的回答:如何使用 C# 发送原始以太网数据包?

使用 Pcap.Net 之类的库,您可以轻松地以任何您想要的方式修改单个数据包(作为它使用底层的 WinPcap 实现,该实现非常强大)。

您还可以完全跳过 IP 层并发送到 MAC 地址,如下所示: http:// www.codeproject.com/KB/IP/sendrawpacket.aspx,我使用类似的方法通过以太网与微控制器(Atmel ATmega)进行通信,该以太网提供几乎实时的通信。

Your question is very well answered here: How send raw ethernet packet with C#?

Using Pcap.Net sort of a library, you can easily modify individual data packets in any way you want (as it uses the underlaying WinPcap implementation which is very powerful).

You can also completely skip the IP layer and send to MAC addresses as in: http://www.codeproject.com/KB/IP/sendrawpacket.aspx where I used a similar approach to communicate with a micro-controller (Atmel ATmega) over Ethernet which provides almost realtime communications.

不及他 2024-11-08 02:12:50

“使用 Pcap.Net 之类的库,您可以轻松地以任何您想要的方式修改单个数据包(因为它使用非常强大的底层 WinPcap 实现)。”

错误的! WinPcap 无法进行过滤/丢包/创建数据包。换句话说,它只是让您以异步方式监视数据包...

原始数据包/混杂模式/驱动程序过滤器/数据包路由是另一个话题。

"Using Pcap.Net sort of a library, you can easily modify individual data packets in any way you want (as it uses the underlaying WinPcap implementation which is very powerful)."

Wrong! WinPcap cant do filtering/packet dropping/ create packet. By other words, its just lets you monitor the packet in an async fashion...

Raw packet /Promiscuous mode/ Driver filter / packet routing is another talk.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文