python程序分析pcap文件的丢包率问题,

Python013

python程序分析pcap文件的丢包率问题,,第1张

使用scapy、scapy_http就可以方便的对pcap包中的http数据包进行解析

#!/usr/bin/env python

try:

import scapy.all as scapy

except ImportError:

import scapy

try:

# This import works from the project directory

import scapy_http.http

except ImportError:

# If you installed this package via pip, you just need to execute this

from scapy.layers import http

packets = scapy.rdpcap('f:\\abc123.pcap')

for p in packets:

print '=' * 78

[python] view plain copy

#print p.show()

for f in p.payload.fields_desc:

if f.name == 'src' or f.name == 'dst':

ct = scapy.conf.color_theme

vcol = ct.field_value

fvalue = p.payload.getfieldval(f.name)

reprval = f.i2repr(p.payload,fvalue)

print "%s : %s" % (f.name, reprval)

for f in p.payload.payload.fields_desc:

if f.name == 'load':

ct = scapy.conf.color_theme

vcol = ct.field_value

fvalue = p.payload.getfieldval(f.name)

reprval = f.i2repr(p.payload,fvalue)

print "%s : %s" % (f.name, reprval)

其中,p为数据包,scapy_http将其分为:

Ethernet->TCP->RAW三个层次,

使用p.show()函数可以打印出如下结果:

###[ Ethernet ]###

dst = 02:00:00:00:00:39

src = 00:00:00:01:02:09

type = 0x800

###[ IP ]###

version = 4L

ihl = 5L

tos = 0x0

len = 1014

id= 7180

flags =

frag = 0L

ttl = 45

proto = tcp

chksum= 0xbbf9

src = 126.209.59.13

dst = 121.113.176.25

\options \

###[ Raw ]###

load = '.....'

第一层是网络层,包含源、目的mac、ip协议号,第二层是tcp层,第三层包含端口号、http报文

其中每一层均为上一层的payload成员

json.dumps 用于将 Python 对象编码成 JSON 字符串。

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

demjson.encode() 函数用于将 Python 对象编码成 JSON 字符串。

demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。

1、以下实例将数组编码为 JSON 格式数据:

#!/usr/bin/python

import json

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json = json.dumps(data)

print json

2、以下实例展示了Python 如何解码 JSON 对象:

#!/usr/bin/python

import json

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

text = json.loads(jsonData)

print text

  Telnet命令通常用来远程登录。Telnet程序是基于TELNET协议的远程登录客户端程序。提供了在本地计算机上完成远程主机工作的 能力,在终端使用者的电脑上使用telnet程序,用它连接到服务器,终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。

  Telnet因为采用明文传送报文,安全性不好。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。telnet命令还可做别的用途:

  Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议。Telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,允许界面终端设备和面向终端的过程能通过一个标准过程进行互相交互。

  为理解Telnet工作过程与使用Python来分析流量,搭建如下环境:

  在R2上启用Telnet作为服务端,在linux主机上安装Telnet程序作为客户端,同时通Wirshark远程捕获Linux 主机在接口流量,在Linux主机上运行Python脚本来分析Telnet流量。

  使用如下Python脚本来捕获Telnet流量,并对Telnet交互命令进行解码。

  使用如下Python脚本对Telnet流量进行嗅探,发现Telnet流量之后发送TCP Reset对Telnet会话进行阻断。

在Linux 主机上先运行Python脚本,在运行Telnet程序。

发现此时无法连接到主机。

查看脚本运行脚本,可见一铺货到Telnet流量就会给双方发送TCP Reset。

在Wirshark上查看数据包交换如下