pcap安装

[root@localhost ~]# pip install pypcap

抓包与解包

# -*- coding:utf-8 -*-
import pcap, dpkt
import re, threading, requests __black_ip = ['103.224.249.123', '203.66.1.212'] # 抓包:param1 eth_name 网卡名,如:eth0,eth3。 param2 p_type 日志捕获类型 1:sdk日志用例分析 2:目标域名过滤输出 3:原始数据包
def catch_pack(eth_name="enp5s0", packet_type=None):
sniffer = pcap.pcap(eth_name)
sniffer.setfilter("tcp") # 只抓取TCP包
# sniffer.setfilter('tcp port 80') # 设置监听过滤器
if sniffer:
for packet_time, packet_data in sniffer: # packet_time为收到的时间,packet_data为收到的数据
th = threading.Thread(target=check_pack, args=(packet_time, packet_data, packet_type))
th.setDaemon(True)
th.start() # 解包
def check_pack(packet_time, packet_data, packet_type):
packet = dpkt.ethernet.Ethernet(packet_data)
# 判断是否HTTP协议javascript:;
try:
m_tips = packet.data.data.data[:3]
except:
return False
if m_tips != 'GET' and m_tips != 'POS': return False # 取回头信息
tmp = get_header(packet, packet_time)
if not tmp: return False
print "tmp===>", tmp
# self.input_database(tmp) # 取header数据
def get_header(packet, packet_time):
if not packet: return False
tmp = {} # 获取基础头信息
tmp['dst'] = "%d.%d.%d.%d" % tuple(map(ord, list(packet.data.dst)))
if tmp['dst'] in __black_ip: return False
tmp['src'] = "%d.%d.%d.%d" % tuple(map(ord, list(packet.data.src)))
tmp['time'] = packet_time
tmp['dport'] = packet.data.data.dport
tmp['sport'] = packet.data.data.sport
# if not self.ip_exists(tmp['dst']): self.input_ip(tmp['dst']) # 截取前1024个字符
t = packet.data.data.data[:1024] # 获取host,uri,referer,method
o = re.search('(GET|POST)\s+(.+)\s+HTTP(.|\n)+Host:\s+(.+)\r(.|\n)+Referer:\s+(.+)\r', t)
if not o: return False
o1 = o.groups()
if len(o1) < 6: return False
tmp['method'] = o1[0]
tmp['host'] = o1[3]
tmp['uri'] = o1[1]
tmp['referer'] = o1[5]
# if self.is_exists(tmp['host'],tmp['dport']): return False
return tmp if __name__ == "__main__":
catch_pack("eth0", 1)

解析pcap文件

try:
import scapy.all as scapy
except ImportError:
import scapy
from scapy.utils import PcapReader packets = scapy.rdpcap('test.pcap')
for data in packets:
if 'UDP' in data:
s = repr(data)
print(data['UDP'].sport)
break

https://www.cnblogs.com/guanfuchang/p/6495533.html

https://www.cnblogs.com/KevinGeorge/p/8088915.html

Python—网络抓包与解包(pcap、dpkt)的更多相关文章

  1. Python 序列与映射的解包操作

    解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...

  2. Python 序列与映射的解包操作-乾颐堂

    解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...

  3. Python小技巧:使用*解包和itertools.product()求笛卡尔积

    [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = ['a', 'b'] list2 = ['c', 'd'] ...

  4. Python 中星号作用:解包&打散

    python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包.  计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...

  5. Python——序列封包与序列解包

    一.序列封包与序列解包 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包. 把一个序列(列表.元组.字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量, ...

  6. Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)

    leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ...

  7. python中收集函数的解包问题

    收集参数的解包问题 - 把参数放入list或者字典中,直接把list/dict中的值放入收集参数中- 语法:参照案例 # 收集参数的问题 def stu(*args): print("=&q ...

  8. ISO8583组包、解包

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace POS. ...

  9. python 网络编程 缓冲和粘包

    tcp:属于长连接,与一个客户端进行连接了以后,其他的客户端要等待,要连接另外一个,必须优雅的断开前面这个客户端的连接. 允许地址重用:在bind IP地址和端口之前加上,# server.setso ...

随机推荐

  1. 简单的jquery表单验证+添加+删除+全选/反选

    //布局 <body> <h4><a href="#">首页</a>><a href="#"> ...

  2. Google Admob移动广告快速集成步骤

    Google Admob移动广告快速集成步骤 第一步:引入依赖包 //admob广告 implementation 'com.google.android.gms:play-services-ads: ...

  3. 编译原理之不懂就问-First集

    老师PPT: 这条语言实在是..通俗易懂

  4. JavaScript调用mysql查询bigint数据精度失真解决方案

    最近我遇上了如题这个问题,后端用node.js写了一个读取mysql数据的接口,之前使用了很久都没发现什么问题,在查询订单表的订单ID时返回的值却是错的 正确的值是 19102818002800002 ...

  5. Gaussian field consensus论文解读及MATLAB实现

    Gaussian field consensus论文解读及MATLAB实现 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.Introduction ...

  6. vue项目搭建及创建、目录结构、项目启动、全局配置

    Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...

  7. SP1716 GSS3 - Can you answer these queries III 线段树

    问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...

  8. beego安装错误处理

    1. 安装beego时无法安装go依赖包 解决办法: $vim ~/.bashrc export GOPROXY=https://goproxy.io $source ~/.bashrc$go get ...

  9. iOS: 本地通知的前后变化(iOS10)

    一.介绍  通知和推送是应用程序中很重要的组成部分.本地通知可以为应用程序注册一些定时任务,例如闹钟.定时提醒等.远程推送则更强大,提供了一种通过服务端主动推送消息到客户端的方式,服务端可以更加灵活地 ...

  10. 有了faker,再也不用为了构造测试数据而烦恼啦!

    在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据.在手动制造数据的过程中,可能需要花费大量精力和工作量,此时可以借助Py ...