RAW套接字- c# -设置标志
本文关键字:标志 设置 RAW 套接字 | 更新日期: 2023-09-27 18:08:38
我正在尝试用c#编写一个发送原始套接字的应用程序。我没有太多的C/c++经验,所以我更喜欢c#。我在c#中找到了几个原始套接字选项,但没有一个允许我设置ACK、SYN、PSH、FIN等标志。如果这可以在c#中完成,你有什么想法吗?
如有任何建议,我将不胜感激。
更新:我正在尝试编写一个工具来测试防火墙,我想发送状态外的数据包,数据包具有不同的标志。我使用的是Win 2008,据我所知,我可以在它上面做原始套接字。如果需要的话,我将使用C/c++,到目前为止,它就是这样的。
进一步更新:SharpPcap看起来不错,v4.0似乎没有源代码,只有3.5有。我将试着通过它,因为文档也不完整。以前有人用过吗?
最后的编辑:SharpPcap看起来很棒!它正在做我需要的!!我将发布一个后续问题,因为我不是。net专家,它捕获得很好,我只是不能从捕获委托部分发送数据包。
谢谢大家!
查看SharpPcap。
根据描述:
SharpPcap是。net环境下的跨平台包捕获框架,基于著名的pcap/WinPcap库。它提供了一个API,用于使用任何。net语言(如c#和VB.NET)捕获、注入、分析和构建数据包。
它内部使用WinPcap驱动程序,因此它将允许您使用自己的IP/TCP头构建原始数据包。
简短的回答,在桌面版的windows上,你不能。从维基百科
当微软在2001年发布Windows XP时,在Winsock接口中实现了原始套接字支持,媒体批评微软声称原始套接字只用于黑客执行TCP重置攻击。在Windows XP发布三年后,微软在一个不可移动的热修复程序中悄悄地限制了Winsock的原始套接字支持,并且没有为使用它们的应用程序提供进一步的支持或解决方案。
如果您想要进入该级别,则可以使用SocketType.Raw
和ProtocolType.IP
创建Socket
。但是,我相信您必须手动创建表示ACK、SYN等的数据包。所以你需要阅读一些RFC文档。:)
我在网上找不到关于你的具体需求的资源,但是读一下这个c#网络嗅探器是如何实现的可能是值得的。至少它会给你一些关于如何在那个级别上操作原始套接字的想法。
编辑:正如Mystere Man所指出的,这在Windows的桌面版本中是不可能的。但是,这应该在服务器版本中工作。以下是微软的官方声明:
原始套接字的限制
在Windows 7、Windows Vista、Windows XP with Service Pack 2 (SP2)和Windows XP with Service Pack 3 (SP3),能够发送流量原始套接字在以下几个方面受到限制:
- TCP数据不能通过原始套接字发送。
- 源地址无效的UDP数据报不能发送原始套接字。任何传出UDP数据报的IP源地址必须存在于网络接口上,或者数据报被丢弃。这种变化是为了限制恶意代码创建分布式的能力拒绝服务攻击和限制发送欺骗的能力报文(伪造源IP地址的TCP/IP报文)
使用IPPROTO_TCP的原始套接字调用bind函数注意允许使用原始套接字的bind函数协议(例如IPPROTO_IP、IPPROTO_UDP或IPPROTO_SCTP)。
上述限制不适用于Windows Server 2008 R2。Windows Server 2008、Windows Server 2003或Windows Server 2008的