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 ElementTree 基本读操作示例
Apr 09 Python
python3编写C/S网络程序实例教程
Aug 25 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
python抽象基类用法实例分析
Jun 04 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Python通用函数实现数组计算的方法
Jun 13 Python
python的命名规则知识点总结
Oct 04 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
vue实现文字加密功能
2019/09/27 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
python编程开发之日期操作实例分析
2015/11/13 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python dlib人脸识别代码实例
2019/04/04 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python中time tzset()函数实例用法
2021/02/18 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
幼师自荐信
2013/10/26 职场文书
给分销商的致歉信
2014/01/14 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
会计助理岗位职责
2014/02/17 职场文书
数字化校园建设方案
2014/05/03 职场文书
车辆年审委托书范本
2014/09/18 职场文书
导游词之湖北武当山
2019/09/23 职场文书