Python安装插件
pandas:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-packet pandas
pip自身升级原因是:用pip install ***,pip自身需最新版。
先去官网下载.whl文件:https://pypi.org/project/pip/#files
并放在目录:D:\SoftWare\Python\Lib\site-packages
再执行:python.exe -m pip install --upgrade pip
pip升级:
python -m pip install --upgrade pip
pip升级:
python -m pip install --upgrade pip -i https://pypi.douban.com/simple
package安装:
pip install scapy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
python打包程序发布版本:
pyinstaller -w -F IQSort.py
C语言发布版本:
http://wjhsh.net/bEngi1-p-12360305.html
说明:初步实现提取pcap包中某个字段的值,如MCS,SINR, TPC等,但需要提前做适配。
补充:Python处理pcap的意义不大,WireShark用的好的话,效率比此方式高很多。
Python3.x安装:略。
pip升级:python -m pip install --upgrade pip -i https://pypi.douban.com/simple
相关package安装:pip install scapy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
from scapy.all import rdpcap //导入相关模块
p = rdpcap(r"C:\Users\Administrator\Desktop\1\123.pcap") //读包操作并保存至p中,如上面的附件1,共有len(p)=221410组数据:
上行MCS131:nr_info.message.type==0x83 //以第22174条数据为例,过滤条件是:nr_info.message.type==0x83
for i in range(len(p)): //遍历221410条数据
if 'Raw' in p[i]: //筛选带有效信息的数据
if p[i]['Raw'].load[0]==131: //type类型0x83对应的十进制是131,相当于上面的过滤条件
for j in range(len(p[i]['Raw'].load)): //遍历type类型为0x83数据的load,load中共j个元素索引
if j==88:
print(i,p[i]['Raw'].load[j],p[i]['Raw'].load[j+4]) //在type类型为0x83数据的load中,MCS索引是88,TPC索引是92
原始数据包
程序运行结果
下行MCS128:
for i in range(len(p)):
if 'Raw' in p[i]:
if p[i]['Raw'].load[0]==128:
for j in range(len(p[i]['Raw'].load)):
if (j==88) and (p[i]['Raw'].load[j]>0):
print(i,p[i]['Raw'].load[j])
PUCCH SINR 133 29
PUSCH SINR 134
for i in range(len(p)): //遍历221410条数据
if 'Raw' in p[i]: //筛选带有效信息的数据
if p[i]['Raw'].load[0]==134: //type类型0x86对应的十进制是134
for j in range(len(p[i]['Raw'].load)): //遍历type类型为0x83数据的load,load中共j个元素索引
if (j==26) and (p[i]['Raw'].load[j]>0): //按0x86过滤出的部分数据组layer字段缺失,需要进一步细化过滤条件,即numOflayers>0
print(i,p[i]['Raw'].load[j],p[i]['Raw'].load[j+1],p[i]['Raw'].load[j+2],p[i]['Raw'].load[j+3]) //layer的索引是26,RSSI索引是27,SINR为28 29
MIB、SIB1:nr_info.dl_tb_data.rnti == 0||nr_info.dl_tb_data.rnti == 65535
for i in range(len(p)):
if 'Raw' in p[i]:
if p[i]['Raw'].load[0]==85:
for j in range(len(p[i]['Raw'].load)):
if j==8:
if ((p[i]['Raw'].load[j]==0 and p[i]['Raw'].load[j+1]==0)or(p[i]['Raw'].load[j]==255 and p[i]['Raw'].load[j+1]==255)):
print(i)