12.3 XP SP2对raw socket所做的改动
https://scz.617.cn/windows/200609051043.txt
Q:
在XP SP2上raw socket发包,得到10004号错误:
A blocking operation was interrupted by a call to WSACancelBlockingCall.
A: microsoft
XP SP2仍支持raw socket的接收,但raw socket的发送被限制了:
1)
不能通过raw socket发送TCP报文
2)
不能通过raw socket发送伪造源IP的UDP报文。被发送UDP报文的源IP必须是本机某个 网络接口上配置的IP,否则这个UDP报文被默默丢弃。
D:
据他人说法,关闭XP SP2自带PFW,同时关闭相关服务即可解决该问题。
Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS)
sc stop SharedAccess 或 net stop SharedAccess
XP SP2上的raw socket我没试过。不过即使在XP SP1上,如果自带PFW开着的话,raw socket发包也是有影响的,所以测试raw socket时,都先去网络属性里关闭自带PFW。
D: Robin Keir robin@keir.net 2005-04-12
XP SP2推出时明确指出"不能通过raw socket发送TCP报文"。2005-04-12之前很容易 绕过这个限制,"net stop SharedAccess"即可。但是,安装MS05-019/KB893066之后, 这个绕过方案不再有效。
当时maillist上语带嘲讽地提到,安装过MS05-019/KB893066的2003"意外地"也不能 通过raw socket发送TCP报文,后来MS被告知这个"BUG",随即在2003 RC2中修正。
下面是一些总结:
2000的raw socket依然是全功能的。
尽管可以通过raw socket发送TCP报文,XP SP0也应该"net stop SharedAccess"。有 个Application Layer Gateway Service/ALG服务,与PFW联系紧密,用raw socket向 21、389、1002、1720/TCP发包时,可能会受ALG服务的干挠。停止SharedAccess服务 时会自动停止ALG服务。
未安装MS05-019/KB893066的XP SP1情形类似XP SP0。
安装过MS05-019/KB893066的XP SP1应该关闭PFW(在本地连接的属性里),但不要停止 SharedAccess服务,通过raw socket发送TCP报文时需要SharedAccess服务。ALG服务 可能会干挠发向某些端口的报文,由于SharedAccess服务依赖ALG服务,这次没法停 止ALG服务。XP SP1缺省没有打开PFW,SharedAccess服务也未启用。参看KB897656。
未安装MS05-019/KB893066的XP SP2应该"net stop SharedAccess"。但这不能解决并 发半开出连接数的限制,惟一已知解决方案是修理tcpip.sys。
安装过MS05-019/KB893066的XP SP2彻底禁止通过raw socket发送TCP报文,无论是否 启用SharedAccess服务。
2003情形类似XP SP0。但是这次ALG服务与SharedAccess服务不再有依赖关系,因此 可以"net stop ALG"。注意,这里说的2003,至少是2003 RC2及其后续版本,或者未 安装MS05-019/KB893066(MS有一个看似无意鬼知道是不是有意的BUG在这个Hotfix里) 的所有版本。
D: scz@nsfocus 2006-09-05
今天亲自在一台打满了最新补丁的英文版XP SP2上测试,证实前述关闭PFW的解决方 案不再有效。
此刻tcpip.sys版本号是5.1.2600.2892,ipnathlp.dll版本号是5.1.2600.2180。如 下三个补丁都修改了tcpip.sys:
MS05-019/KB893066 MS06-007/KB913446 MS06-032/KB917953
如果试图卸载MS05-019/KB893066恢复通过raw socket发送TCP报文的能力,势必同时 卸载后续两个补丁,这不是一个好主意。
可以考虑动用NDIS Protocol Driver,比如:
Raw Ethernet Packet Sending - miahrugger [2003-10-25] http://www.codeproject.com/cs/internet/sendrawpacket.asp http://www.codeproject.com/cs/internet/SendRawPacket/SendRawPacket.zip
也可以考虑剁了tcpip.sys、ipnathlp.dll(不推荐)。