You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:39:03