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中title()方法的使用简介
May 20 Python
关于Django外键赋值问题详解
Aug 13 Python
详解python3中zipfile模块用法
Jun 18 Python
pycharm安装和首次使用教程
Aug 27 Python
Python子类继承父类构造函数详解
Feb 19 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
详解Python多线程下的list
Jul 03 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
使用PHP编写的SVN类
2013/07/18 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
jquery实现动态画圆
2014/12/04 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
vue小白入门教程
2018/04/02 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python字典及字典基本操作方法详解
2018/01/30 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
课前三分钟演讲稿
2014/04/24 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
体育馆的标语
2014/06/24 职场文书
学习委员竞选稿
2015/11/20 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js