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使用urllib2获取网络资源实例讲解
Dec 02 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Python语言生成水仙花数代码示例
Dec 18 Python
浅述python中深浅拷贝原理
Sep 18 Python
python3爬虫怎样构建请求header
Dec 23 Python
python多进程读图提取特征存npy
May 21 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 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
10款实用的PHP开源工具
2015/10/23 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
python+opencv实现动态物体追踪
2018/01/09 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
由面试题加深对Django的认识理解
2019/07/19 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
详解Python高阶函数
2020/08/15 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
教师实习自我鉴定
2013/12/13 职场文书
管理心得体会
2013/12/28 职场文书
大学生表扬信范文
2014/01/09 职场文书
大学运动会通讯稿
2014/01/28 职场文书
军训考核自我鉴定
2014/02/13 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
小学教代会开幕词
2016/03/04 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs