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中用于去除空格的三个函数的使用小结
Apr 07 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
Python温度转换实例分析
Jan 17 Python
python多线程之事件Event的使用详解
Apr 27 Python
django解决订单并发问题【推荐】
Jul 31 Python
python入门之基础语法学习笔记
Feb 08 Python
keras打印loss对权重的导数方式
Jun 10 Python
python安装读取grib库总结(推荐)
Jun 24 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
php session安全问题分析
2011/06/24 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
PHP微信分享开发详解
2017/01/14 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
匹配任意字符的正则表达式写法
2010/04/29 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python中的 enum 模块源码详析
2019/01/09 Python
详解python tkinter模块安装过程
2020/01/06 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
意大利在线药房:Saninforma
2021/02/11 全球购物
自我鉴定怎么写
2014/01/12 职场文书
模范教师事迹材料
2014/12/16 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Java死锁的排查
2022/05/11 Java/Android
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android