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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
python flask框架实现重定向功能示例
Jul 02 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
python 数据分析实现长宽格式的转换
May 18 Python
python属于解释型语言么
Jun 15 Python
pytorch 中forward 的用法与解释说明
Feb 26 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生成静态页面教程
2012/01/10 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
document.createElement()用法
2013/03/13 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
JS前端笔试题分析
2016/12/19 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
小程序实现长按保存图片的方法
2019/12/31 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Python 元组操作总结
2019/09/18 Python
如何运行带参数的python脚本
2019/11/15 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
Python 日期与时间转换的方法
2020/08/01 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
高三上学期学习自我评价
2014/04/23 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
遗嘱范文
2015/08/07 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
JavaCV实现照片马赛克效果
2022/01/22 Java/Android