如何使用C#或Java发送SYN数据包

时间:2011-03-12 19:36:18

标签: c#

我想将SYN数据包发送到远程主机,现在的问题是,如果我使用任何.NET框架类,那么我就不能这样做了;例如TCP客户端获取主机IP和端口号并建立连接,与java中的ClientSocket类相同。

我想控制自己的连接建立;我的意思是我想发送连接请求(SYN数据包)然后等待连接回复然后发送数据包。我知道没有外部库可能并不容易,所以如果有人可以指导我如何在C#或Java中完成它。 。

3 个答案:

答案 0 :(得分:2)

您正在寻找的是原始套接字。我不知道C#,但是Java中有一些库允许你这样做,例如RockSaw。据我所知,你不能使用纯Java做到这一点。

请注意,在某些操作系统(至少是Linux)上,您需要具有管理员权限才能打开原始套接字。 Windows上有一些限制。 (参见我链接的页面。)

答案 1 :(得分:2)

使用Socket类的SocketType为raw,以及正确的协议类型。我想你想要TCP。

  var sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Tcp);

答案 2 :(得分:2)

到目前为止,不是对两个答案都进行评论......自XP以来,Windows中的原始套接字受到限制(对抗恶意软件攻击)。阅读以下内容:

http://msdn.microsoft.com/en-us/library/ms740548(v=vs.85).aspx

完成后,您可以根据Mat的Java答案或Ritch的C#规则构建一个原始套接字。

它将严格限制访问,并且非常依赖于系统。我不知道有一种方法来完成3路握手并通过TCP / UDP传输数据(虽然我有兴趣听一个)。

我想我应该快速修改这个答案。如果你不使用winsock而是使用不同的TCP堆栈,你可能得到你想要的东西(但这仍然不能直接在操作系统中使用)。请将此作为示例提供:http://www.komodia.com/tcpip-library-v5-1/或此前SO线程What is a popular, multi-platform, free and open source socket library