Chion
Chion
膜拜巅峰 带我学前端
感谢分享。后续可以考虑使用libpcap来实现。目前该项目仍在开发中,尚有些问题待解决,特别是需要接入mux层。目前暂时只支持linux平台,待时机成熟的时候会考虑进行windows兼容。 再次感谢你的分享。
刚才尝试了一下,如果不绕过内核,内核会发RST包,但是仍然能够使用(程序会对包做协议头验证),不过会大大降低带宽载荷,另外如果广域网中间路由器对RST包做检测,也可能会切断伪TCP连接。
@linhua55 是的,这只是一个尝试,实际使用肯定还是要想办法绕过内核的。需要移植的话还有很多的工作需要做。btw,中间路由器在切断连接的时候除了发RST还会撤销NAT映射关系,在客户端心跳检测逻辑中有自动更换端口的设定,在NAT失效后可以重新选择随机端口尝试建立新的NAT通道。
这确实是一个不错的方法。在路由器上查询ARP缓存表,虚拟机和实体机的IP对应的是同一个MAC地址,看来桥接网卡确实是通过ARP投毒实现的。
事实上我的路由器(是软路由)只有一个LAN口,下面接的是交换机再接电脑,所以在我的路由器上不存在物理端口和电脑的MAC直接对应的关系表。我是在路由器上使用`arp -n`命令查询的,发现物理机和虚拟机确实是不同ip对应相同的MAC(都为物理机网卡的MAC),而其他客户端(另外的电脑和手机)都是不同IP对应不同的MAC。当然,虚拟机在dhcp握手阶段提交的是虚拟机的网卡MAC地址(可能是因为dhcp是在udp层提交MAC地址而不是dhcp服务器直接从链路层获取MAC的缘故?只是猜测,我并没有了解过dhcp协议报文),才能避免物理机和虚拟机分配到相同的IP。我认为应该还是发生了arp投毒。至于MAC地址和物理端口的缓存关系表是存在的,这个表应该是在家用路由器(即NAT路由器+交换机)的交换部分逻辑中。
What is the problem with 3 way handshake enabled? Here is a simple program where you can test the connectivity with fixed TCP flags: https://gist.github.com/Chion82/699ae432a27507242ea788df324f4e47
It is totally possible and actually [relayRawSocket](https://github.com/linhua55/some_kcptun_tools/tree/master/relayRawSocket), by which kcptun-raw is inspired, is doing what you want by sending TCP packets with only SYN flags. However: * Most ISPs block...
I've added the SYN-only feature to [syn-only branch](https://github.com/Chion82/kcptun-raw/tree/syn-only) with additional `--syn-only` option. Make some tests and see if it works.
@zhorakuz you should enable `--syn-only` BOTH on client and server side