Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将原始套接字与C一起使用#_C#_Tcp_Raw Sockets - Fatal编程技术网

C# 将原始套接字与C一起使用#

C# 将原始套接字与C一起使用#,c#,tcp,raw-sockets,C#,Tcp,Raw Sockets,我想用C#编写端口扫描程序,但无法使用SocketType.Raw,因为原始套接字是从桌面版windows中取出的。我不能使用SharpPcap或Winpcap的其他包装器,因为我使用PPPoE连接互联网,Winpcap不支持PPP设备 我需要使用一个实现原始套接字且不依赖winpcap的库 有什么想法吗?基本上我需要发送SYN、接收SYN/ACK或RST,但不发送ACK 编辑: 对于那些不相信原始套接字已从桌面版Windows中消失的人,请参见此处: 在Windows 7、Windows Vi

我想用C#编写端口扫描程序,但无法使用SocketType.Raw,因为原始套接字是从桌面版windows中取出的。我不能使用SharpPcap或Winpcap的其他包装器,因为我使用PPPoE连接互联网,Winpcap不支持PPP设备

我需要使用一个实现原始套接字且不依赖winpcap的库

有什么想法吗?基本上我需要发送SYN、接收SYN/ACK或RST,但不发送ACK

编辑:

对于那些不相信原始套接字已从桌面版Windows中消失的人,请参见此处:

在Windows 7、Windows Vista、带Service Pack 2(SP2)的Windows XP和带Service Pack 3(SP3)的Windows XP上,通过原始套接字发送流量的能力受到以下几种方式的限制:

  • TCP数据不能通过原始套接字发送
  • 无法通过原始套接字发送源地址无效的UDP数据报。网络接口上必须存在任何传出UDP数据报的IP源地址,否则数据报将被丢弃。此更改旨在限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送伪造数据包(具有伪造源IP地址的TCP/IP数据包)的能力
  • 不允许使用
    IPPROTO_TCP
    协议的原始套接字调用
    bind
    函数。
    注意其他协议(例如,
    IPPROTO\u IP
    IPPROTO\u UDP
    ,或
    IPPROTO\u SCTP
    )允许使用带有原始套接字的
    bind
    功能
就这样,


另外,它是在什么时候从Windows中删除的?上周我为一个朋友做了一个聊天客户端;同样,仍将其列为活动状态。

请注意nmap是如何做到这一点的,目前我认为您的选择是在以太网帧上转到较低级别

“Nmap仅支持以太网接口(包括大多数802.11无线网卡和许多VPN客户端)进行原始数据包扫描。除非使用-sT-Pn选项,否则RAS连接(如PPP拨号)并且某些VPN客户端不受支持。当Microsoft在Windows XP SP2中删除原始TCP/IP套接字支持时,此支持被放弃。现在Nmap必须改为发送低级以太网帧。”

因此,这让我们想到:


尝试以管理员身份运行Visual Studio

右键单击-->以管理员身份运行


然后使用原始套接字执行程序。

原始套接字与TCP套接字不同。看到没有,我只是混合了我所做的只是下面的例子,没有什么需要改变的链接,因为它仍然有效。实际上,我刚刚复制并粘贴了代码,编译了代码,并在Windows上运行了可执行文件,没有任何问题7@Dave不,.Net没有瘫痪,但winsock有。这也影响C++。如果我发布一个关于Java的问题,你会建议我使用Python?请参阅本文第三条评论中的“原始套接字的限制”。它是在windows上安装的,与.net没有任何关系。据我所知,部分想法是帮助防止机器人军队在毫无戒备的机器上伪造ip地址,以便用于DoS洪水攻击等。Heya@DaveHistish-您建议创建自己的winsock库作为解决方法?考虑到与较低级别的系统接口、分层服务提供商支持等集成的测试工作和需求,这似乎有点复杂?除非我错过了一个简单的步骤,否则这似乎是一个相当大的挑战?只是寻找这个解决方案的理论来理解它多一点。几年前,在编写ws-hooking函数和存根时,这是一项相当大的测试工作,现在这一层更为复杂。在对答案进行投票之前,请理解什么是原始套接字,它不仅仅是在中使用套接字。纯学术评论:你不能编写自己的WinSock DLL吗?写了原始套接字,自己在UNIX/LINUX中做TCP,我认为这应该是可能的。谢谢链接。这是一本有趣的书,会让我忙上一段时间。我可以使用那个家伙开发的驱动程序,如果我有一个普通的以太网连接,但我的互联网是FTTH,我通过以太网拨打PPP连接,所以我不直接使用NIC。为PPPoE编写NDIS驱动程序目前超出了我的能力。嗯,你可以通过共享/路由等方式扫描虚拟适配器,然后通过ppp连接将其路由到网络吗?我不知道它是否会工作,只是一个想法:)当然,这将是一个好主意,但我没有成功地尝试将tune/tap驱动程序或Microsoft环回驱动程序与我的PPPoE连接连接起来。我想提出一个解决方案,让我的软件的所有用户都可以使用,无论他们以何种方式连接到internet。原始套接字在非服务器版本的Windows上不起作用。请重新阅读原问题中MSDN中引用的段落。