最近很长一段时间内又捡起了大学时丢下的网络协议,开始回顾网络协议编程,于是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. HDOJ 1004题 Let the Balloon Rise strcmp()函数

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  2. 点分治练习: boatherds

    [题面] 求一颗树上距离为K的点对是否存在 输入数据 n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径 接下来m行每行询问一个K 输出数据 对于每个K每行输出一个答案,存在输出“AYE ...

  3. 基于TCP协议的服务器(多线程)

    import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; impo ...

  4. First Adventures in Google Closure -摘自网络

    Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...

  5. 谈JAVA的内存回收(一)

    谈JAVA的内存回收 程序员需要通过关键字new创建Java对象,即可视为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间,当一个Java对象失去引用时,JVM的垃圾回收机制会自动清除他 ...

  6. struts2环境搭建和第一个程序

    环境搭建 项目目录 导入依赖jar包,如上图lib目录所示. 不同的版本可能会不一样,没关系在tomcat启动时,如果报错java.lang.ClassNotFoundException,我们可以按照 ...

  7. Peterson算法与Dekker算法解析

    进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations  lik ...

  8. Araxis Merge Professional v2014.4565 特别版 | 文件比较合并

    http://www.ttrar.com/html/AraxisMerge.html Araxis Merge 是一个可视化的文件比较.合并和同步的软件,能够方便的被软件工程师和 web 站点开发者使 ...

  9. UVA Mapping the Swaps

    题目例如以下: Mapping the Swaps  Sorting an array can be done by swapping certain pairs of adjacent entrie ...

  10. 01 if

    if - else     if语句是一种控制语句,执行一代码块,如果一个表达式计算为true if (expression)     statement1 else   statement2   如 ...