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

如何使用C#或Java发送SYN数据包,c#,C#,我想向远程主机发送SYN数据包,现在的问题是,如果我使用.NET framework的任何一个类,那么我就无法做到这一点;e、 g.TCP客户端获取主机ip和端口号并建立连接,java中的ClientSocket类也是如此 我想控制我自己的连接建立;我的意思是我想发送连接请求(SYN数据包),然后等待连接回复,然后发送数据包。我知道没有外部库可能不容易,所以如果有人能指导我如何在C#或Java中实现这一点 您要查找的是原始套接字。我不知道C#,但Java中有一些库可以让您这样做,例如。据我所知,

我想向远程主机发送SYN数据包,现在的问题是,如果我使用.NET framework的任何一个类,那么我就无法做到这一点;e、 g.TCP客户端获取主机ip和端口号并建立连接,java中的ClientSocket类也是如此


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

您要查找的是原始套接字。我不知道C#,但Java中有一些库可以让您这样做,例如。据我所知,用纯Java是做不到的


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

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

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

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

完成后,您当然可以根据Mat对Java的回答或Ritch对C#的回答,按照他们的规则构建原始套接字

它的访问将受到严格限制,并且非常依赖于系统。我不知道有什么方法可以完成三方握手并通过TCP/UDP传输数据(尽管我很想听听)


我想我应该对这个答案做一个快速的修正。如果您不使用winsock,而是使用不同的TCP堆栈,您可能会得到您想要的(但这在操作系统中仍然不是直接可用的)。将此视为示例产品:或之前的SO线程

+1良好点。我不知道安全限制。看起来过滤器驱动程序可能是实现这一目标的唯一方法。我大胆猜测,如果你对历史感兴趣的话,OP会从嗅探流量中得到更多,而不是试图与之互动。这部分是基于对红色代码蠕虫的反应。GRC的史蒂夫·吉布森(Steve Gibson)非常公开地试图让MSFT删除XP中的原始套接字可编程性。原始文章是离线的,但这是一个很好的缓存:---为了完整性,在阅读了varius stuxnet分析之后,对@iLevel-进行反驳,这似乎是一个非常简单的时间。@Ritch-不是开玩笑。安全是我的领域,我甚至无法想象人们下一步会想到什么。作为说明,我确实在答案中发布了一些可选的TCP堆栈选项。(Komodia有一些光滑的产品)高水平!!谢谢你的回复;他们很有帮助;Komodia不是一个好的选择,因为它是在C++中我在C或java中寻找东西,我找到了一个更好的解决方案JPCAP(java网络库)也许是个不错的选择…有了Jpcap,你可以做任何事情,从发送连接请求到定制数据包等等。。。。。