raw socket遇上windows
最近很长一段时间内又捡起了大学时丢下的网络协议,开始回顾网络协议编程,于是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的更多相关文章
- C#的Raw Socket实现网络封包监视
同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本 ...
- C#之Raw Socket实现网络封包监视
同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本 ...
- 【VS开发】raw socket 的例子
raw socket 的例子 一. 摘要 Raw Socket: 原始套接字 可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP... int sockRa ...
- SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案
SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...
- 转:socket编程在windows和linux下的区别
如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...
- socket编程在windows和linux下的区别
如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...
- Path Analyzer Pro出现raw socket问题
使用windows7,8以及10平台运行一个traceroute liketools软件,名为Path Analyzer Pro 2.7,遇到raw socket问题,如图: 原因是raw socke ...
- raw, SOCK_RAW - Linux IPv4 raw socket.
总 览 #include <sys/socket.h> #include <netinet/in.h> raw_socket = socket(PF_INET, SOCK_RA ...
- 四探循环依赖 → 当循环依赖遇上 BeanPostProcessor,爱情可能就产生了!
开心一刻 那天知道她结婚了,我整整一个晚上没睡觉,开了三百公里的车来到她家楼下,缓缓的抽了一支烟...... 天渐渐凉了,响起了鞭炮声,迎亲车队到了,那天披着婚纱的她很美,真的很美! 我跟着迎亲车队开 ...
随机推荐
- HDOJ 1004题 Let the Balloon Rise strcmp()函数
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- 点分治练习: boatherds
[题面] 求一颗树上距离为K的点对是否存在 输入数据 n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径 接下来m行每行询问一个K 输出数据 对于每个K每行输出一个答案,存在输出“AYE ...
- 基于TCP协议的服务器(多线程)
import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; impo ...
- First Adventures in Google Closure -摘自网络
Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...
- 谈JAVA的内存回收(一)
谈JAVA的内存回收 程序员需要通过关键字new创建Java对象,即可视为Java对象申请内存空间,JVM会在堆内存中为每个对象分配空间,当一个Java对象失去引用时,JVM的垃圾回收机制会自动清除他 ...
- struts2环境搭建和第一个程序
环境搭建 项目目录 导入依赖jar包,如上图lib目录所示. 不同的版本可能会不一样,没关系在tomcat启动时,如果报错java.lang.ClassNotFoundException,我们可以按照 ...
- Peterson算法与Dekker算法解析
进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations lik ...
- Araxis Merge Professional v2014.4565 特别版 | 文件比较合并
http://www.ttrar.com/html/AraxisMerge.html Araxis Merge 是一个可视化的文件比较.合并和同步的软件,能够方便的被软件工程师和 web 站点开发者使 ...
- UVA Mapping the Swaps
题目例如以下: Mapping the Swaps Sorting an array can be done by swapping certain pairs of adjacent entrie ...
- 01 if
if - else if语句是一种控制语句,执行一代码块,如果一个表达式计算为true if (expression) statement1 else statement2 如 ...