Python—网络抓包与解包(pcap、dpkt)
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)的更多相关文章
- Python 序列与映射的解包操作
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- Python 序列与映射的解包操作-乾颐堂
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积
[问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = ['a', 'b'] list2 = ['c', 'd'] ...
- Python 中星号作用:解包&打散
python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包. 计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...
- Python——序列封包与序列解包
一.序列封包与序列解包 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包. 把一个序列(列表.元组.字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量, ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ...
- python中收集函数的解包问题
收集参数的解包问题 - 把参数放入list或者字典中,直接把list/dict中的值放入收集参数中- 语法:参照案例 # 收集参数的问题 def stu(*args): print("=&q ...
- ISO8583组包、解包
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace POS. ...
- python 网络编程 缓冲和粘包
tcp:属于长连接,与一个客户端进行连接了以后,其他的客户端要等待,要连接另外一个,必须优雅的断开前面这个客户端的连接. 允许地址重用:在bind IP地址和端口之前加上,# server.setso ...
随机推荐
- HTML——CSS基础
一.引入CSS样式表 1.行内式 通过标记的style属性来设置元素的样式.基本语法如下: <标记名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;" ...
- 矩阵的运算:Python语言实现
一.矩阵的加减法 import numpy as np #这里是矩阵的加法 ar1=np.arange(10).reshape(10,1) ar1 ar2=np.arange(10).reshape( ...
- 40-用 volume container 共享数据
volume container 是专门为其他容器提供 volume 的容器.它提供的卷可以是 bind mount,也可以是 docker managed volume.下面我们创建一个 volum ...
- Linux系统学习 七、网络基础—常用网络命令
1.ifconfig #查看网络(设置IP临时生效) 2.hostname [主机名] #查看或设置主机名 默认的是localhost ...
- iotop使用方法
iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具.iotop 具有与 top 相似的 UI,其中包括 PID.用户.I/O.进程等相关信息. 安装 yum install iot ...
- driver.find_element_by_xpath.clear()无法清空输入框默认值
输入框带默认值,想删除默认值,填写新内容,使用clear()再send_keys(), 发现这种方式无法清除,只会在默认值后面追加新的内容. 上网搜了一下,有两种解决方案,如下: 方法一: 先双击,后 ...
- Codeforces Round #600 (Div. 2)
传送门 A. Single Push 直接乱搞即可. Code /* * Author: heyuhhh * Created Time: 2019/11/16 22:36:20 */ #include ...
- C++ 标准库,可变参数数量,参数类型相同
#include <iostream> // 可变模板参数 // 此例:可以构造可变数量,可变类型的函数输入. // 摘自:https://www.cnblogs.com/qicosmos ...
- 一天两道PAT(2)1005,1006
今天的pat1006没什么好说的.就记录一下1005的状况.先上题目. 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重 ...
- WPF 动态生成对象属性 (dynamic)
原文:WPF 动态生成对象属性 (dynamic) 项目中列行的数据 都需要动态生成 所以考虑到对象绑定 可需要一个动态生成属性的意思 缺点 加载速度会慢 很明显的慢 解决办法 尽量减轻动态属性的量 ...