20250906

0234睡到0825,今天是中元节。

昨天的游戏人多就捕获不到似乎不是因为游戏服务器改变,像是单纯的没有处理好包。因为识别到游戏服务器: 58.217.182.174:20474 -> 192.168.31.240:59431,而之后服务器 192.168.31.240:59431 -> 58.217.182.174:20474 - 捕获数据包数: 1005服务器 192.168.31.240:59431 -> 58.217.182.174:20474 - 捕获数据包数: 1755;说明客户端一直在往这个服务器发包。但却没有服务器来的包,反而服务器 58.217.183.115:5003 -> 192.168.31.240:50294 - 捕获数据包数: 59像是服务器来的,却没能识别到。

不对,有服务器发来的包,我代码没记。。

人少的时候能很轻松的通过小包识别到服务器。

又试了,服务器 58.217.182.174:20457 -> 192.168.31.240:53396 - 捕获数据包数: 1787,识别到的服务器捕获到的包有很多,但都没被处理到,为什么,总不会是py原因吧。

人多的时候FrameDown也变成1秒1次;

看了看TCP分段处理然后解析包的逻辑,突然意识到我这个解析到一半就没法获取到怪物血量会不会是丢包,因为可能因为seq断了死循环在那里;会不会和winpcap和npcap有关。

WARNING: WinPcap is now deprecated (not maintained). Please use Npcap instead。该升级了,

WinPcap/Npcap 有统计接口(pcap_stats),能看到捕获丢包数量。

先试试。

因为用的Scapy所以不方便直接recv, drop, ifdrop = pc.stats(),那不试了,直接下Npcap吧。

  • 卸载 WinPcap。
  • 安装 Npcap(勾选 WinPcap API 兼容模式)。
  • Python 的 scapy/pcapy 就会自动走 Npcap。

为什么WinPcap可能丢包,TCP不是能保证到达吗。

丢的不是 TCP 协议里的数据,而是 抓包工具没抓到:

用了Npcap依然同样问题,我没招了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
while len(self._data) > 4:
            try:
                packet_size = struct.unpack('>I', self._data[:4])[0]
                
                if len(self._data) < packet_size:
                    break
                    
                if packet_size > 0x0fffff:
                    logger.error(f"无效的数据包长度: {packet_size}")
                    break
                    
                # 提取完整数据包
                packet = self._data[:packet_size]
                self._data = self._data[packet_size:]
                
                # 分析数据包负载
                self._analyze_payload(packet, "TCP")
                
            except Exception as e:
                logger.info(f"处理完整数据包失败: {e}")
                break

这里可能因为packet_size==0死循环。所以之前可能也没有丢包的问题。。

依然有self.tcp_next_seq in self.tcp_cache:一直收不到的问题,打算写个线程监控停在一个seq过久就丢弃,问题是丢弃多少,只能丢弃所有吧,因为不知道下一个包的大小所以无法直接定位下下个包。

今晚星痕共鸣在公屏看到时装队,随手就进了,在经历过一次团队分崩离析后我又组建了新的团队;然而新的团队又在某人出货后再次分崩离析了;我也感受到了重复劳作的无聊与痛苦,去qq群中找了个自动刷时装的exe,结果windows不让用,还自动帮我删了;好在github上有类似项目,开心的拉下来使用了,效果还挺好,打算今后多挂挂了,再也不手动去刷了。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计