最近很长一段时间内又捡起了大学时丢下的网络协议,开始回顾网络协议编程,于是linux系统成了首选,它让我感到了无比的自由,可以很通透的游走于协议的各层。

最初写了个ARP欺骗程序,很成功的欺骗了win7与虚机内的windows 2003之间的通讯,感觉linux系统在网络接口这一块确实很自由,后来基于ARP原理继续写了个ARP扫描器,感觉也还不错。同时对于网络编程来说,编写一个嗅探程序也是必不可少的,它同样式在linux下完成的,可以很好的监听虚机构成的局域网。

在完成主机扫描后,接下来步入端口扫描领域,个人偏好SYN扫描,为了扫描主机所在的局域网,开始在win7下编写SYN扫描器代码,很快一个小巧的扫描器完成,接下来却遇到一个花了不少时间还没解决的问题。在用SYN扫描器做虚机内网测试时,发现监听程序无论如何也没办法捕获到扫描器构造的TCP包,首先开始怀疑是不是构造的TCP包不规范,导致被网卡丢弃了,调试代码,没有发现问题,而且sento成功的返回了发送出去的字节数,同时用winHex打开发送数据文件,对比TCP/IP协议,也未能找到值得怀疑的地方。在花了不少时间派出扫描器程序的问题,不得不怀疑是不是监听程序存在缺陷,于是更换Wireshark,重新监听网卡,也不能捕获到SYN扫描器构造的TCP包。接下来花了大量的时间在不停的做出问题判断并测试验证,还是未能找出原因。

直到又写了一个基于TCP连接原理的扫描器,发现它可以很好的工作,监听程序也能很好的捕获到TCP包,此时再次关注sento,开始怀疑raw socket及socket与操作系统有关系,前面测试得出结论,在win7下,socket可以很好的工作,而raw socket则不能。为了验证这个问题,把SYN扫描器搬到windows 2003上运行,当看到给出扫描结果的cmd窗口时,直接傻眼了,居然真的是与操作系统有关系。

最后去msdn上查找raw socket时,找到了下面的描述(http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs.85%29.aspx):

Limitations on Raw Sockets

On Windows 7, Windows Vista, Windows XP with Service Pack 2 (SP2), and Windows XP with Service Pack 3 (SP3), the ability to send traffic over raw sockets has been restricted in several ways:

  • TCP data cannot be sent over raw sockets.
  • UDP datagrams with an invalid source address cannot be sent over raw sockets. The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped. This change was made to limit the ability of malicious code to create distributed denial-of-service attacks and limits the ability to send spoofed packets (TCP/IP packets with a forged source IP address).
  • A call to the bind function with a raw socket for the IPPROTO_TCP protocol is not allowed.

    Note  The bind function with a raw socket is allowed for other protocols (IPPROTO_IP, IPPROTO_UDP, or IPPROTO_SCTP, for example).

These above restrictions do not apply to Windows Server 2008 R2, Windows Server 2008 , Windows Server 2003, or to versions of the operating system earlier than Windows XP with SP2.

总算是弄明白了,然来raw socket真的不能在win7下发送tcp数据包。不过相信,这种限制肯定也是可以突破的,只是等待去挖掘而已。

就是这么一个路人皆知的常识,确实实在在的消耗了我不少的时间和精力,只能说没文化,真可怕!此外还有一点点怀念xp系统,至少他不会阻拦我的raw socket。

探索的过程是让人很兴奋的,在攻克一个个知识盲点之后,总能找到新的高度,立足于此,于是有了下一个征程……端口入侵……漏洞扫描……

raw socket遇上windows的更多相关文章

  1. C#的Raw Socket实现网络封包监视

    同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本 ...

  2. C#之Raw Socket实现网络封包监视

    同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本 ...

  3. 【VS开发】raw socket 的例子

    raw socket 的例子 一. 摘要    Raw Socket: 原始套接字    可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP... int sockRa ...

  4. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  5. 转:socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  6. socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  7. Path Analyzer Pro出现raw socket问题

    使用windows7,8以及10平台运行一个traceroute liketools软件,名为Path Analyzer Pro 2.7,遇到raw socket问题,如图: 原因是raw socke ...

  8. raw, SOCK_RAW - Linux IPv4 raw socket.

    总 览 #include <sys/socket.h> #include <netinet/in.h> raw_socket = socket(PF_INET, SOCK_RA ...

  9. 四探循环依赖 → 当循环依赖遇上 BeanPostProcessor,爱情可能就产生了!

    开心一刻 那天知道她结婚了,我整整一个晚上没睡觉,开了三百公里的车来到她家楼下,缓缓的抽了一支烟...... 天渐渐凉了,响起了鞭炮声,迎亲车队到了,那天披着婚纱的她很美,真的很美! 我跟着迎亲车队开 ...

随机推荐

  1. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. Android性能测试

    FPS和流畅度 FPS 1.dumpsys SurfaceFlinger –latency shell 脚本通过 dumpsys SurfaceFlinger --latency 数据计算 FPS 和 ...

  3. 用 localhost 访问正常,替换成 IP ,部分 CSS 或 JS 就失效了

    这应该是浏览器的兼容性问题. 经测试,只要不是360浏览器的兼容模式,将 localhost 替换成 IP 无影响. 来自为知笔记(Wiz)

  4. 获得URl信息

      public class GetUrlInfo {     public static void printfInfo(URL url)throws Exception     {         ...

  5. oracle删除当前用户下所有表

    1.如果有删除用户的权限,则可以: drop user user_name cascade; 加了cascade就可以把用户连带的数据全部删掉. 删除后再创建该用户.--创建管理员用户create u ...

  6. java模拟DVD管理器

    import java.util.*;import java.text.*;class DVDSet{    String[] name = new String[50]; //名字    int[] ...

  7. Junit初体验

    JUnit是一个开源的Java单元测试框架,由 Erich Gamma 和 Kent Beck 开发完成. 主要是为了方便开发人员在自己开发的过程中能够及时的发现和解决bug用的,一方面自己可以通过单 ...

  8. Idea实现WebService实例 转

    作者:http://blog.csdn.net/dreamfly88/article/details/52350370 因为工作需要,数据传输部分需要使用webservice实现,经过两天的研究,实现 ...

  9. KindEditor编辑器(初始化参数)

    width 编辑器的宽度,可以设置px或%,比textarea输入框样式表宽度优先度高. 数据类型: String 默认值: textarea输入框的宽度 示例: K.create('#id', {  ...

  10. 遇到java.lang.OutOfMemoryError: Java heap space问题【持续跟踪中...】

    昨天下午app服务端无缘无故又502错了,我打开tomcat 日志: INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: i ...