作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python调用tcpdump抓包过滤的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了python调用tcpdump抓包过滤的具体代码,供大家参考,具体内容如下 。
之前在linux用python脚本写一个抓包分析小工具,实在不想用什么libpcap、pypcap所以,简单来了个tcpdump加grep搞定。基本思路是分别起tcpdump和grep两个进程,进程直接通过pipe交换数据,简单代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#! /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
|
运行效果:
其中值得注意tcpdump中'-B', '4096'这个参数,官方文档貌似没有明确提及,但是它是你解决丢包的关键地方之一,当然还有-s这个参数也得好好利用!其他的大家可以自由发挥! 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/wangqiuyun/article/details/46966839 。
最后此篇关于python调用tcpdump抓包过滤的方法的文章就讲到这里了,如果你想了解更多关于python调用tcpdump抓包过滤的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正尝试在使用 django-paypal app 的网站上通过 PSP paypal 集成支付. 它适用于标准,似乎也适用于大多数专业支付。我正在使用沙盒站点并想使用 WPP 框架 来测试授权 -
我是一名优秀的程序员,十分优秀!