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调用java的Webservice示例
Mar 10 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
python学习数据结构实例代码
May 11 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
Python get获取页面cookie代码实例
Sep 12 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
python列表,字典,元组简单用法示例
Jul 11 Python
python实现简单图书管理系统
Nov 22 Python
python模块内置属性概念及实例
Feb 18 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
js 省地市级联选择
2010/02/07 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Python中使用Inotify监控文件实例
2015/02/14 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
用Python解数独的方法示例
2019/10/24 Python
Python中无限循环需要什么条件
2020/05/27 Python
社区志愿者心得体会
2014/01/03 职场文书
国际会计专业求职信
2014/08/04 职场文书
地理科学专业自荐信
2014/09/01 职场文书
医生见习报告范文
2014/11/03 职场文书
情感电台广播稿
2015/08/18 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
vue选项卡切换的实现案例
2022/04/11 Vue.js