-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在Windows上使用的可能性 #2
Comments
感谢分享。后续可以考虑使用libpcap来实现。目前该项目仍在开发中,尚有些问题待解决,特别是需要接入mux层。目前暂时只支持linux平台,待时机成熟的时候会考虑进行windows兼容。 再次感谢你的分享。 |
刚才尝试了一下,如果不绕过内核,内核会发RST包,但是仍然能够使用(程序会对包做协议头验证),不过会大大降低带宽载荷,另外如果广域网中间路由器对RST包做检测,也可能会切断伪TCP连接。 |
@Chion82 |
@linhua55 是的,这只是一个尝试,实际使用肯定还是要想办法绕过内核的。需要移植的话还有很多的工作需要做。btw,中间路由器在切断连接的时候除了发RST还会撤销NAT映射关系,在客户端心跳检测逻辑中有自动更换端口的设定,在NAT失效后可以重新选择随机端口尝试建立新的NAT通道。 |
https://github.com/jvns/teeceepee 这个是 可能 虚拟机的 桥接网卡 模式,也是这样(ARP投毒)实现的 |
这确实是一个不错的方法。在路由器上查询ARP缓存表,虚拟机和实体机的IP对应的是同一个MAC地址,看来桥接网卡确实是通过ARP投毒实现的。 |
理解错了,虚拟机 桥接网卡 使用的MAC地址是虚拟机自己的MAC地址,不是主机的MAC地址 |
事实上我的路由器(是软路由)只有一个LAN口,下面接的是交换机再接电脑,所以在我的路由器上不存在物理端口和电脑的MAC直接对应的关系表。我是在路由器上使用 |
@Chion82
关于在windows上运行的可能性, 分享一下最近 看 net-speeder 和 finalSpeed 源码的心得:
net-speeder 使用了 pcap来接收,使用libnet来发送。 net-speeder支持openvz (Cooked packet/mode),因此libnet应该也支持openvz
而finalSpeed 统一使用 pcap来接收和发送,但pcap的发送不支持openvz(Cooked packet/mode)。
因此在openvz上finalSpeed只支持UDP mode,不支持 TCP mode。https://github.com/the-tcpdump-group/libpcap/blob/f8198434d6d0b1016ee597a7c64723b1b1c48333/pcap-linux.c#L2064
https://wiki.wireshark.org/SLL
而finalSpeed的 TCP mode 的实现, 就是 使用了 绕过内核协议栈 的技术。 在linux机器上使用iptables (drop)来绕过。而在Windows机器上,Windows xp 和 Windows 2003使用 ipseccmd.exe , 而在其他Windows机器上使用 netsh命令。
详细命令可见:
https://github.com/91yun/finalspeed/blob/master/src/net/fs/server/FSServer.java#L171
https://github.com/91yun/finalspeed/blob/master/src/net/fs/server/FSServer.java#L234
The text was updated successfully, but these errors were encountered: