#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using std::cout;
using std::endl;
using std::thread;
using std::vector;
using std::string;
void getPacket(u_char * arg,const struct pcap_pkthdr *pkthdr,const u_char * packet);
int main(int argc,char * argv [ ])
{
if (argc < 2){
cout << "please input test filename\n";
return 0;
}
cout << "test filename= " << argv[1] << endl;
cout << "begin time= " << time(0) << endl;
//读取libpcap的版本
const char *version;
version = pcap_lib_version();
cout << version << endl;
//打开cap文件
char *dev = NULL;
char errBuff[PCAP_ERRBUF_SIZE] = {0};
pcap_t *handle = NULL;
handle = pcap_open_offline(argv[1], errBuff);
if (NULL == handle){
cout << "Error: " << errBuff << endl;
exit(1);
}
cout << "running pcap_next\n";
//读取cap文件,打印抓取到的每一个包的概要
struct pcap_pkthdr *pktHeader = NULL;
int status = 0;
const u_char *pktData = NULL;
int id = 0;
do{
cout << "---------------------------------------------------------------------\n";
cout << "status: " << status << endl;
status = pcap_next_ex(handle, &pktHeader, &pktData);
getPacket((u_char *)&id, pktHeader, pktData);
}while(status == 1);
pcap_close(handle);
cout << "end time=" << time(0) << endl;
return 0;
}
//解析数据包
void getPacket(u_char * arg,const struct pcap_pkthdr *pkthdr,const u_char * packet){
char src_mac[18] = "";
char dst_mac[18] = "";
char src_addr[20] = "";
char dst_addr[20] = "";
vector split_vector;
char *p = NULL;
const char *split = "|";
int *id = (int *)arg;
cout << "id: " << ++(*id) << endl;
cout << "Packet length: " << pkthdr->len << endl;
cout << "Number of bytes: " << pkthdr->caplen << endl;
cout << "Recieved time: " << ctime((const time_t *)&pkthdr->ts.tv_sec);
if (pkthdr->len < 42)
{
cout << "wifi TanZhen message length error." << endl;
exit(1);
}
sprintf(dst_mac, "%02x:%02x:%02x:%02x:%02x:%02x", *(packet + 0), *(packet + 1), *(packet + 2), *(packet + 3), *(packet + 4), *(packet + 5));
sprintf(src_mac, "%02x:%02x:%02x:%02x:%02x:%02x", *(packet + 6), *(packet + 7), *(packet + 8), *(packet + 9), *(packet + 10), *(packet + 11));
//消息头
if (*(packet + 12) == 0x08 && *(packet + 13) == 0x00)
{
printf("____________________IP Protocol____________________\n");
printf("MAC:%s >> %s\n", src_mac, dst_mac);
sprintf(src_addr, "%02d.%02d.%02d.%02d", *(packet + 26), *(packet + 27), *(packet + 28), *(packet + 29));
sprintf(dst_addr, "%02d.%02d.%02d.%02d", *(packet + 30), *(packet + 31), *(packet + 32), *(packet + 33));
printf("IP:%s >> %s\n", src_addr, dst_addr);
if (*(packet + 23) == 0x01)
{
printf("____________________ICMP____________________\n");
}
else if (*(packet + 23) == 0x02)
{
printf("____________________IGMP____________________\n");
}
else if (*(packet + 23) == 0x06)
{
printf("____________________TCP____________________\n");
}
else if (*(packet + 23) == 0x11)
{
printf("____________________UDP____________________\n");
}
printf("Port: %d >> %d\n", ntohs(*(unsigned short *)(packet + 34)), ntohs(*(unsigned short *)(packet + 36)));
}
//GTPv2消息解析
printf("________________GPRS Tunneling Protocol________________\n");
printf("Flag:%02x\n", *(packet + 42));
if (*(packet + 43) == 0x01){
printf("type: Echo Request\n");
}
else if (*(packet + 43) == 0x02){
printf("type: Echo Response\n");
}
else if (*(packet + 43) == 0x10){
printf("type: Create PDP context request\n");
}
else if (*(packet + 43) == 0x11){
printf("type: Create PDP context response\n");
}
else if (*(packet + 43) == 0x12){
printf("type: Update PDP context request\n");
}
else if (*(packet + 43) == 0x13){
printf("type: Update PDP context Response\n");
}
else if (*(packet + 43) == 0x14){
printf("type: Delete PDP context request\n");
}
else if (*(packet + 43) == 0x15){
printf("type: Delete PDP context Response\n");
}
else if (*(packet + 43) == 0x20){
printf("type: Create Session Request\n");
}
else if (*(packet + 43) == 0x21){
printf("type: Create Session Response\n");
}
else if (*(packet + 43) == 0x22){
printf("type: Modify Bearer Request\n");
}
else if (*(packet + 43) == 0x23){
printf("type: Modify Bearer Response\n");
}
else if (*(packet + 43) == 0x24){
printf("type: Delete Session Request\n");
}
else if (*(packet + 43) == 0x25){
printf("type: Delete Session Response\n");
}
else if (*(packet + 43) == 0x30){
printf("type: Identification request\n");
}
else if (*(packet + 43) == 0x31){
printf("type: Identification Response\n");
}
else if (*(packet + 43) == 0x32){
printf("type: SGSN context request\n");
}
else if (*(packet + 43) == 0x33){
printf("type: SGSN context reponse\n");
}
else if (*(packet + 43) == 0x34){
printf("type: SGSN context acknowledegment\n");
}
else if (*(packet + 43) == 0x40){
printf("type: Modify Bearer Command\n");
}
else if (*(packet + 43) == 0x46){
printf("type: Downlink Data Notification Failure Indication\n");
}
else if (*(packet + 43) == 0x61){
printf("type: Update Bearer Request\n");
}
else if (*(packet + 43) == 0x62){
printf("type: Update Bearer Response\n");
}
else if (*(packet + 43) == 0x63){
printf("type: Delete Bearer Request\n");
}
else if (*(packet + 43) == 0x64){
printf("type: Delete Bearer Response\n");
}
else if (*(packet + 43) == 0x82){
printf("type: Context Request, Tracking area update request\n");
}
else if (*(packet + 43) == 0x83){
printf("type: Context Response\n");
}
else if (*(packet + 43) == 0x84){
printf("type: Context Acknowledge\n");
}
else if (*(packet + 43) == 0x85){
printf("type: Forward Relocation Request\n");
}
else if (*(packet + 43) == 0x8d){
printf("type: Configuration Transfer Tunnel\n");
}
else if (*(packet + 43) == 0xa6){
printf("type: Create Indirect Data Forwarding Tunnel Request\n");
}
else if (*(packet + 43) == 0xa7){
printf("type: Create Indirect Data Forwarding Tunnel Response\n");
}
else if (*(packet + 43) == 0xa8){
printf("type: Delete Indirect Data Forwarding Tunnel Request\n");
}
else if (*(packet + 43) == 0xa9){
printf("type: Delete Indirect Data Forwarding Tunnel Response\n");
}
else if (*(packet + 43) == 0xaa){
printf("type: Release Access Bearers Request\n");
}
else if (*(packet + 43) == 0xab){
printf("type: Release Access Bearers Response\n");
}
else if (*(packet + 43) == 0xb0){
printf("type: Downlink Data Notification\n");
}
else if (*(packet + 43) == 0xb1){
printf("type: Downlink Data Notification Acknowledgement\n");
}
printf("Length: %d\n", ntohs(*(unsigned short *)(packet + 44)));
printf("TEID:0x%02x%02x%02x%02x\n", *(packet + 46), *(packet + 47), *(packet + 48), *(packet + 49));
printf("Sequence Number:0x00%02x%02x%02x\n", *(packet + 50), *(packet + 51), *(packet + 52));
}
相关推荐
gtpv2:用于golang的GPRS隧道协议库
总览 该软件包为GPRS隧道协议(GTP)版本2提供了一个模块。GTPv2在。 安装 go get github.com/blorticus/gtpv2 基本用法 package main import ( gtpv2 "github.com/blorticus/gtpv2" "net" "fmt" ) func main () { modifyBearerRequest := gtpv2 . NewPDU ( gtpv2 . ModifyBearerRequest , 0x00001acc , [] * gtpv2. IE { gtpv2 . NewIEWithRawData ( gtpv2 . UserLocationInformation , [] byte { 0x18 , 0x00 , 0x11 ,
GTP协议格式分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “分析GTP协议。” 本文对比较枯燥的协议资料进行学习,有需要可继续阅读,找到自己关注的知识点,暂时无需要可直接拉到文末表示阅读结束,让微信记下热爱学习的你的痕迹。 如果说TCP/IP协议是网络世界的老大,那么,移动网络世界的扛把子一定是GTP协议无疑了。 GTP协议,即GPRS T...
GTPv2通信协议详解(英文版)
详细的介绍了GTPv2的数据包类型、数据包格式、表达的含义、包含的元素类型、以及通信方式等,总的来讲,是学习GTPv2协议非常有帮助的资料
对于GTPv2协议头部的解析
参考3GPP TS 29.060 GTP的头部是可变的,GTP-C(control)和GTP-U(user)共同使用一个头部。 GTP Header头部: -Version 用来标识GTP协议的版本,在这里应该设置为1。 -Protocol Type(PT)。这一位用来标识是GTP(PT为1)还是GTP'(PT为0)。GTP'在3GPP TS 32.295中定义,并且它的头部的含义和G...
3gpp GTPv2-c
3GPP TS 29.274 V12.6.0 (2014-09) Technical Specification 3rd Generation Partnership Project; Technical Specification Group Core Network and Terminals; 3GPP Evolved Packet System (EPS); Evolved General Packet Radio Service (GPRS) Tunnelling Protocol for Control plane (GTPv2-C); Stage 3 (Release 12) 百度文库里下载的文件损坏打不开了,这是从官网下载的
Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略
本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。
GPRS核心网-GTP-C协议解析
GPRS隧道协议(GTP)是3GPP标准定义的隧道协议,用于在3G / 4G网络中承载通用分组无线服务(GPRS)。 GTP用于在服务网关(S-GW)和分组数据网络网关(P-GW)以及S-GW和移动性管理实体(MME)之间为用户设备建立GTP隧道。如图-EPC架构: GTP包含哪些单独的协议? GTP包括在UDP / IP上传输的控制平面(GTP-C),用户平面(GTP-U)和计费(从GTP-C派生的GTP)流量。 GTP-C-在核心GPRS网络中的S-GW和P-GW之间执行信令,以激活和停用用户会话,调
Jetson Orin Nano Super开发板实战:视觉模型部署与性能优化指南
本文详细介绍了Jetson Orin Nano Super开发板在边缘AI视觉模型部署与性能优化的完整实战指南。内容涵盖JetPack 6.1环境配置、Docker容器化部署、YOLO11及Transformer模型的TensorRT优化技巧,并通过实测数据展示了性能提升与功耗管理策略,为开发者提供高效的视觉AI部署解决方案。
23060
1) RRC连接已经建立,如果没有先建立。MS 向新的SGSN发送路由区更新请求(P‑TMSI, old RAI, old P‑TMSI Signature, Update Type, follow on request, Classmark, DRX Parameters, MS Network capability)。如果有未确定的上行链路数据流(signalling or...
Globus数据下载全攻略:从零配置到批量下载大文件(附常见问题解决)
本文详细介绍了Globus数据下载的全流程,从零配置到批量下载大文件的实用技巧,包括环境准备、高级传输策略、性能优化及常见问题解决方案。Globus作为科研数据的高效传输工具,通过并行流传输和自动校验技术,显著提升大规模数据传输的效率和可靠性。
PCIe 6.0实战指南:从链路训练到信号完整性的避坑手册
本文是一份针对PCIe 6.0硬件工程师的实战避坑指南。文章深入解析了从NRZ到PAM4调制带来的信号完整性挑战,详细拆解了链路训练(LTSSM)的复杂过程与调试方法,并提供了从信道仿真到实验室实测(如使用Keysight示波器进行眼图与误码率分析)的完整信号完整性闭环验证策略,帮助工程师解决高速率下的链路不稳定与降速问题。
WCDMA信令流程(非常详细)
非常实用 在WCDMA系统中具有的各种各样的信令流程中,从协议栈的层面来说,可以分为接入层的信 令流程和非接入层的信令流程;从网络构成的层面来说,可以分为电路域的信令流程和分 组域的信令流程。 所谓接入层的流程和非接入层的流程,实际是从协议栈的角度出发的。在协议栈中,RRC和 RANAP层及其以下的协议层称为接入层,它们之上的MM、SM、CC、SMS等称为非接入层。简 单地说,接入层的流程...
Unlocking Decoding-time Controllability: Gradient-FreeMulti-Objective Alignment with Contrastive Pr
将基于庞大网络语料库训练的大型语言模型(LLMs)(OpenAI,2023;Touvron 等,2023;Google,2023)与人类偏好对齐,是减少产生不安全(Wei 等,2023)、幻觉(Zhang 等,2023b)和有偏见(Gallegos 等,2023)内容的重要一步。随着偏好学习技术(如 PPO(Schulman 等,2017)、DPO(Rafailov 等,2023)及其他变体(Azar 等,2023;Ethayarajh 等,2024;
3G时会有两次 Activate PDP context request消息
展锐平台为ATTACH_REQUEST建立的RRC不会用来发送ACTIVATE_PDP_CONTEXT_REQUEST,因为ATTACH_REQUEST和ACTIVATE_PDP_CONTEXT_REQUEST需要建立RRC的原因是不一样的;展锐平台为ATTACH_REQUEST建立的RRC不会用来发送ACTIVATE_PDP_CONTEXT_REQUEST,因为ATTACH_REQUEST和ACTIVATE_PDP_CONTEXT_REQUEST需要建立RRC的原因是不一样的,具体见下面日志分析。...
自动驾驶---Planning模块详细介绍(以Apollo为例)
主要介绍高速场景下Planning模块,至于低速的泊车场景对比高速场景或者城区场景有比较大的差距(后面也会介绍泊车场景),本篇Planning介绍主要包括三大子模块Routing,Behavioural Planning以及Motion Planining,并且对比较重要的Decider和Optimizer都做了通俗化的说明供大家思考,以便于后续理解更深入的内容,后面有时间会再开一些篇幅对这些模块进行更加深入的讲解。
RV1126 ROS2环境交叉编译及部署(基于官方Docker)
我的所有基于`RV1126`的机器人项目都是在`Ubuntu22.04`下进行开发的,在`Ubuntu18.04 Docker`容器中实现`RV1126`的`SDK`编译,详细可参考我之前的博客[《Ubuntu20.04/22.04下Docker方案实现多平台SDK编译》第2章](https://blog.youkuaiyun.com/w1820020635/article/details/147342689),`RV1126`的`ROS1`部署没什么难度,可以参考我之前的博客,这里记录了`ROS2`交叉编译及问题解决
APN 建立PDP流程
GsmDataConnectiontracker.java中: private class ApnChangeObserver extends ContentObserver { public ApnChangeObserver () { super(mDataConnectionTracker); }
基于STM32单片机智能循迹小车毕业设计
本文介绍了一种利用STM32F103C8T6单片机为控制核心,结合多种传感器以及PID算法实现循迹避障功能的智能小车。随着我国高科技水平的不断提高和工业自动化进程的不断推进,智能小车被广泛应用于各种玩具和其他产品的设计中,极大地丰富了人们的生活。本次设计利用反射式红外光电传感器探测路面黑线实现小车循迹,利用超声波测距传感器探测路径上的障碍,控制小车自动避障,整个系统具有自动循迹、自动避障、速度检测和无线遥控功能。其中,控制部分采用STM32F103C8T6单片机,STM32F103C8T6单片机是一
流程总结
1.Create Session Request GTP HeaderIMSI:MCC(460)+MNC(00中移动)+MSIN(10位)MSISDN:CC(86)+NDC(133)+SN MEI ULI:Flags(ECGI/TAI/RAI/SAI/CGI) + TAI(MCC+MNC+Tracking Area Code) + ECGI(MCC+MNC+ECI)Serving
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
牢牢掌握一个完整呼叫的信令流程
1.概述 作为一名网优工程师, 需要牢牢掌握一个完整呼叫的信令流程. 我们做GSM优化, 主要是对Um口要把握的更深些. 尤其是Layer3信令-也就是我们平常做路测的工程师说的层3信令。关于层3信令,可以参考GSM规范04.08. 对层3信令的准确理解,可以帮助我们快速分析和定位网络问题. 2. 理论部分 2.1一次完整的主叫流程(含切换) IDLE: DL: SYSTEM INF
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
Overview of PDP Contexts and Bearers
two。
gtp.h源码
/* * OpenGGSN - Gateway GPRS Support Node * Copyright (C) 2002, 2003, 2004 Mondru AB. * * The contents of this file may be used under the terms of the GNU * General Public License Vers
发包真香之:scapy工具
本期介绍发包工具scapy--python工具
计算机各层网络协议
计算机各层网络协议 应用层: (典型设备:应用程序,如FTP,SMTP ,HTTP) DHCP(Dynamic Host Configuration Protocol)动态主机分配协议,使用 UDP 协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配 IP 地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。实 现即插即用连网。
GTP协议的分析
一、 引言 在GPRS系统的GSN(GPRS Support Node,包括SGSN和GGSN)之间采用GTP(GPRS Tunnel Protocol)协议,GTP在整个GPRS协议栈中起着举足轻重的作用,GTP协议承载在TCP或UDP协议之上,分为信令平面和传输平面,其信令平面定义了多种消息,涉及到GPRS许多重要方面,传输平面则提供了GSN之间数据包传送的隧道。另外以GTP为基础的GT
9.2 PDP Context Activation, Modification, and Deactivation Functions
https://itectec.com/spec/9-2-pdp-context-activation-modification-and-deactivation-functions/ These functions are only meaningful at the NSS level and in the MS, and do not directly involve the BSS. An MS in STANDBY or READY state can initiate these functi
3万+



被折叠的 条评论
为什么被折叠?



