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

Posted

技术标签:

【中文标题】如何使用 C# 或 Java 发送 SYN 数据包【英文标题】:How to send SYN packet using C# or Java 【发布时间】:2011-03-12 19:36:18 【问题描述】:

我想向远程主机发送 SYN 数据包,现在的问题是,如果我使用 .NET 框架的任何类,那么我不能这样做;例如TCP Client 获取主机 ip 和端口号并建立连接,java 中的 ClientSocket 类也是如此。

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

【问题讨论】:

【参考方案1】:

到目前为止,与其对这两个答案都发表评论......自 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

【讨论】:

+ 1好点。我不知道安全限制。看起来过滤器驱动程序可能是实现它的唯一方法。我敢猜测 OP 会从嗅探流量中获得更多收益,而不是尝试与之交互。 如果您对历史感兴趣。这部分是基于对代码红色蠕虫的响应。来自 GRC 的 Steve Gibson 非常公开地试图让 MSFT 删除 XP 中的原始套接字电缆。原文章已下线,但这是一个很好的缓存:crime-research.org/library/grcdos.pdf --- 为了完整起见反驳staff.washington.edu/dittrich/misc/ddos/grc-reply.txt @iivel - 在阅读了各种 stuxnet 分析之后,这似乎是一个更简单的时间。 @Ritch - 不开玩笑。安全是我的领域,我什至无法想象人们接下来会想出什么。作为说明,我确实在答案中发布了一些替代的 TCP 堆栈选项。 (Komodia 有一些漂亮的产品) 嗨iivel!谢谢你的回复! ;他们非常有帮助; Komodia 对我来说不是一个好选择,因为它在 C++ 中我一直在寻找 C# 或 java 中的东西,我找到了一个更好的解决方案 Jpcap(Java 网络库)也许是一个不错的选择......有了 Jpcap,你可以做任何事情从发送连接请求到制作自定义数据包等等.....【参考方案2】:

您正在寻找的是所谓的原始套接字。我不了解 C#,但 Java 中有一些库可以让你做到这一点,例如RockSaw。据我所知,你不能使用纯 Java 来做到这一点。

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

【讨论】:

【参考方案3】:

使用具有原始 SocketType 和正确协议类型的 Socket 类。我想你想要 TCP。

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

【讨论】:

以上是关于如何使用 C# 或 Java 发送 SYN 数据包的主要内容,如果未能解决你的问题,请参考以下文章

国内网站遭遇SYN攻击事如何及时解决问题

java 基础知识

java网络编程三次握手四次挥手

Scapy SYN 在我们自己的 IP 地址上发送

TCP是在每个数据包上发送SYN / ACK还是仅在第一个连接上发送?

如何写一个C或Java应用程序来处理TCP SYN请求[关闭]