windows原始套接字sock_raw的使用限制

windows原始套接字sock_raw的使用限制

测试环境

windows版本:Windows10 1903

限制总结

​ 分析ddos泛洪攻击的文章很多,本文记录下windows下原始套接字sock_raw的使用限制。
原始套接字能够让开发者自行解析和构造网络层和数据传输层的IP头,UDP头和TCP头等数据。笔者将能够在linux下测试成功的UDP Flood(使用原始套接字sock_raw的)代码移植到windows下进行测试,失败,经过多次抓包对比IP头,UDP头,在MSDN上找到了答案,总结一下windows下的限制:

  • windows下使用原始套接字sock_raw的程序需要以管理权权限启动

  • TCP数据无法通过原始套接字发送

  • 源地址无效的UDP数据报不能通过原始套接字发送(微软为了限制恶意代码创建分布式拒绝服务攻击以及伪造源IP地址的TCP/IP数据包)

    附MSDN图:

socket_raw1

​ 通过原始套接字发送的数据包,windows会检查你的源IP是否为本机IP(合法IP),如果不是,那么发送不出去;修改源IP为本机才能正常发送,但是这样发送出去的数据包还不如直接发以SOCK_STREAMSOCK_DGRAM类型的套接字建立的数据包。

参考链接

TCP/IP Raw Sockets