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 ...
随机推荐
- ES6-对象赋值,key值得构建,is()方法对比对象,assign()合并对象
ES6对象赋值: // es5 let name = "ananiah"; let skill ='web'; let obj = {name:name,skill:skill}; ...
- 北航软件学院Java历届期末考题整理
文章目录 abstract static Thread finally package Exception I/O 子类和父类 关键字 标识符 垃圾收集 数据类型 环境配置 网路编程 initial ...
- RAC ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
重启RAC时发现32004,后来才发现DG已经不存在了standby_archive_dest还在生效中,而background_dump_dest和user_dump_dest并没在pfile中出现 ...
- [日常] win10开启和安装ubuntu子系统
在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统 在微软商店里搜索ubuntu,直接点击安装就可以了 安装完成后的windows与linux的磁盘映射见 ...
- [Linux] 获取出日志中的邮箱shell
需求是把所有的日志中邮箱获取出来,根据指定关键字过滤,邮箱的格式是\txxx@xxx\t的格式,日志的存放是按照日期作为目录 #!/bin/bash logBasePath="/data1/ ...
- 对于Python语音性能的一些个人见解
虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...
- 8.jenkins 远程管理
远程原理 在我们之前的操作中,是直接将指令写在jenkins 里面的 .因为是做实验.所以指令比较简单. 如果是正式环境的话,可能指令就比较多了. 我们可以将他写成脚本. 我们可以再 jenkins的 ...
- nginx学习(三):nginx的进程模型
概述 nginx 进程分为 master进程和work进程 1.打开配置文件查看,这里我修改为2 [root@xxx conf]# vim nginx.conf #user nobody; worke ...
- LG2679 「NOIP2015」子串 线性DP
问题描述 LG2679 题解 设\(opt[i][j]\)代表A串前\(i\)个,匹配\(B\)串前\(j\)个,选择了\(k\)个子串的方案数. 转移用前缀和优化一下. \(\mathrm{Code ...
- 微信小程序开发——websocket测试
服务端 在windows下执行 node server.js 也可参照我的前一篇部署https var httpServ = require('http') var WebSocketServer ...