python调用tcpdump抓包过滤的方法


Posted in Python onJuly 18, 2018

本文实例为大家分享了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

运行效果:

python调用tcpdump抓包过滤的方法

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

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

Python 相关文章推荐
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
详解在Python中处理异常的教程
May 24 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
python实现信号时域统计特征提取代码
Feb 26 Python
python微信公众号开发简单流程实现
Mar 09 Python
Python configparser模块操作代码实例
Jun 08 Python
python excel和yaml文件的读取封装
Jan 12 Python
如何用用Python将地址标记在地图上
Feb 07 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 #Python
解决Python3中的中文字符编码的问题
Jul 18 #Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 #Python
python 将print输出的内容保存到txt文件中
Jul 17 #Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 #Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 #Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 #Python
You might like
PHP与javascript的两种交互方式
2006/10/09 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
js创建数组的简单方法
2016/07/27 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
使用python加密自己的密码
2015/08/04 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
会计辞职信范文
2014/01/15 职场文书
小学敬老月活动方案
2014/02/11 职场文书
企业授权委托书范本
2014/04/02 职场文书
小学综合实践活动总结
2014/07/07 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
感谢信怎么写
2015/01/21 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers