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)

posted on 2022-11-15 15:08  图像处理工程师  阅读(151)  评论(0编辑  收藏  举报