Python使用Scapy抓包时如何实时更新显示指定ICMP数据包的总数量
实现代码
首先修正原有导入语句的语法错误,通过计数器+行覆盖的方式实现单行动态更新,完整代码如下:
from scapy.all import sniff # 初始化包计数器 packet_count = 0 # 固定统计信息前缀 stat_prefix = "Total icmp packets from 192.168.100.3 to 192.168.100.2 is " def update_stat(packet): global packet_count packet_count += 1 # \r 表示光标回到当前行开头,end='' 避免输出换行,flush=True 强制实时刷新输出 print(f"\r{stat_prefix}{packet_count}", end='', flush=True) if __name__ == "__main__": try: sniff( filter="icmp and src host 192.168.100.3 and dst host 192.168.100.2", prn=update_stat ) except KeyboardInterrupt: # 捕获Ctrl+C退出时输出换行,避免终端提示符和统计行粘连 print()
实现说明
- 核心靠
\r转义符实现行覆盖:输出内容以\r开头时,终端会将光标移到当前行的起始位置,新输出的内容会直接覆盖旧内容,不会产生新行 end=''参数关闭print默认的换行行为,保证始终在同一行输出flush=True强制刷新输出缓冲区,避免内容缓存导致更新不及时- 加入KeyboardInterrupt异常处理,按Ctrl+C退出时自动补换行,不影响后续终端输入的显示
内容的提问来源于stack exchange,提问作者MRA1412
相关产品推荐
相关产品推荐

