python调用tcpdump抓包过滤的方法

 更新时间:2018年07月18日 09:04:24   作者:wangqiuyun  
这篇文章主要为大家详细介绍了python调用tcpdump抓包过滤的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python调用tcpdump抓包过滤的具体代码,供大家参考,具体内容如下

之前在linux用python脚本写一个抓包分析小工具,实在不想用什么libpcap、pypcap所以,简单来了个tcpdump加grep搞定。基本思路是分别起tcpdump和grep两个进程,进程直接通过pipe交换数据,简单代码如下:

#! /usr/bin/python
 
def tcpdump():
 import subprocess, fcntl, os
 # sudo tcpdump -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"
 cmd1 = ['tcpdump', '-i', 'eth0', '-n','-B', '4096','-s', '0', '-w', '-']
 cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'Host: .*|GET /.*']
 p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
 p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout)
 
 flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)
 fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK))
 return p2
 
 
def poll_tcpdump(proc):
 #print 'poll_tcpdump....'
 import select
 txt = None
 while True:
 # wait 1/10 second 
 readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1)
 if not len(readReady):
  break
 try:
  for line in iter(proc.stdout.readline, ""):
  if txt is None:
   txt = ''
  txt += line
 except IOError:
  print 'data empty...'
  pass
 break
 return txt
 
 
proc = tcpdump()
while True:
 text = poll_tcpdump(proc)
 if text:
 print '>>>> ' + text

运行效果:


其中值得注意tcpdump中'-B', '4096'这个参数,官方文档貌似没有明确提及,但是它是你解决丢包的关键地方之一,当然还有-s这个参数也得好好利用!其他的大家可以自由发挥!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python使用random.shuffle()随机打乱字典排序

    Python使用random.shuffle()随机打乱字典排序

    本文主要介绍了Python使用random.shuffle()随机打乱字典排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • python绘制风场方向和大小quiver问题

    python绘制风场方向和大小quiver问题

    这篇文章主要介绍了python绘制风场方向和大小quiver问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Windows下PyCharm配置Anaconda环境(超详细教程)

    Windows下PyCharm配置Anaconda环境(超详细教程)

    这篇文章主要介绍了Windows下PyCharm配置Anaconda环境,本文给大家分享一篇超详细教程,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • python3.12.7降级到3.10.0的方法步骤

    python3.12.7降级到3.10.0的方法步骤

    本文主要介绍了python3.12.7降级到3.10.0的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 使用Python操作MySQL的一些基本方法

    使用Python操作MySQL的一些基本方法

    这篇文章主要介绍了使用Python操作MySQL的一些基本方法,Python+MySQL也是服务器端快速开发的一种绝佳搭配方案,需要的朋友可以参考下
    2015-08-08
  • python读取txt文件并逐行输出字符串

    python读取txt文件并逐行输出字符串

    Python提供了简单且方便的方法来读取txt文件,使用open()函数和readlines()方法逐行输出文件中的字符串内容,我们可以轻松地读取文件内容,并通过循环遍历的方式逐行处理,读取txt文件的方法在各种应用场景中非常常见,可以用于数据分析、文本处理、日志分析等
    2023-10-10
  • pygame实现时钟效果

    pygame实现时钟效果

    这篇文章主要为大家详细介绍了pygame实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python简单实现两个任意字符串乘积的方法示例

    Python简单实现两个任意字符串乘积的方法示例

    这篇文章主要介绍了Python简单实现两个任意字符串乘积的方法,结合实例形式分析了Python针对字符串、列表的切片、转换、遍历等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • Python字符串的encode与decode研究心得乱码问题解决方法

    Python字符串的encode与decode研究心得乱码问题解决方法

    为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式?
    2009-03-03
  • Python 不同对象比较大小示例探讨

    Python 不同对象比较大小示例探讨

    不同对象比较是按照 type names 比较,当相同类型对象不支持适当比较的时候,采用 address 比较,需要的朋友可以参考下
    2014-08-08

最新评论