QT5.2+Wireshark的pipe通讯问题
来源:互联网 发布:北美免费海关数据 编辑:程序博客网 时间:2024/06/02 02:28
这几天一直在做QT5.2+wireshark之间的通讯时用过pipe进行的,wireshark本身是作为pipe服务端的,QT端只要对wireshark的pipe进行连接就可以了,但是QT对pipe没有进行专门的封装,所以我们需要使用Windows API进行连接,QT使用Windows API时,需要加头文件,
#include<windows.h>
并在工程文件中加
LIBS += -lgdi32这样就可以在QT中使用Windows API了,连接wireshark的pipe使用下面的代码:
void frmMain::on_openwshButton_clicked()
{
//HANDLE hPipe;
ShellExecute(0,L"open",
L"D:\\Program Files\\Wireshark\\Wireshark.exe",
L"-i \\\\.\\pipe\\wireshark0 -k",NULL,SW_SHOWNORMAL);
hPipe = CreateNamedPipe(
L"\\\\.\\pipe\\wireshark0",
PIPE_ACCESS_OUTBOUND,
PIPE_TYPE_MESSAGE | PIPE_WAIT,
1, 65536, 65536,
300,
NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
printf("Pipe open error!\r\n");
//return 0;
}
ConnectNamedPipe(hPipe, NULL);
// 发送文件头
DWORD cbWritten = 0;
WriteFile(hPipe,&__GtPipeFileHeader, sizeof(__GtPipeFileHeader), &cbWritten, NULL);
}为了使wireshark可以识别出来我们发送的数据是IEEE802.15.4协议的数据包,需要在pipe连接成功后发送一个pipe文件头格式
我定义的pipe结构体如下:
typedef struct {
DWORD32 magic_number; // 4 Magic编号固定为0xA1B2C3D4
WORD version_major; // 2 主版本号固定为2
WORD version_minor; // 2 监控版本号固定为4
DWORD32 thiszone; // 4 GMT to local correction固定为0
DWORD32 sigfigs; // 4 是否需要精确的时间戳建议设置为0
DWORD32 snaplen; // 4 抓到的包最大长度建议设置为65535
DWORD32 network; // 4 链路层编号对于IEEE802.15.4,固定为195
}tPipeFileHeader;
在串口接收到的数据中将实际需要的数据包截取出来,注意在QT中需要用quint8/quint16/quint32这样格式的数组格式进行pipe数据传输,不然wireshark会解析错误的。我在QT串口中是这样做到的://读串口
void frmMain::ReadMyCom()
{
//这个判断尤为重要,否则的话直接延时再接收数据,空闲时会出现高内存占用
if (myCom->bytesAvailable()<=0)
{
return;
}
else
{
//myHelper::Sleep(50);//延时100毫秒保证接收到的是一条完整的数据,而不是脱节的
requestdata=myCom->readAll();
quint8 buf[512];
for(int i=0;i<requestdata[5]-2;i++)
{
buf[i]=requestdata[7+i];
}
WritePipeFrameHeader(hPipe,requestdata[5]-2);
WritePipeFrameData(hPipe,(void *)&buf[0],requestdata[5]-2);
}
}
这样在wireshark中就会识别出来这个数据包了:至此,QT+wireshark的通讯就完成了。
0 0
- QT5.2+Wireshark的pipe通讯问题
- 简单的QT5网络Tcp通讯
- 简单的QT5网络Tcp通讯
- Qt5 遇到的问题
- QT5的中文问题
- wireshark 抓包的问题
- 编译wireshark遇到的问题
- Angular 2的管道Pipe
- Angular 2的管道Pipe
- Qt4转到Qt5的问题
- Qt5中文输入的问题
- Qt5 中文乱码的问题
- qt4->qt5的相关问题
- 串口通讯的问题
- 串口通讯的问题
- mac(10.7.5)安装qt5.2碰到的问题总结
- Qt5.2和VS2013中文乱码的问题
- wireshark实战之:arp通讯
- iOS开发iOS7状态栏文字颜色修改
- RxJava开发精要1-从.NET到RxJava
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- JavaScript学习笔记一:数据类型和变量
- C语言结构体打包的意义
- QT5.2+Wireshark的pipe通讯问题
- spring(5)构建 spring web 应用程序
- matlab之plot、fplot、ezplot函数
- [从头学数学] 第237节 重积分
- spring源码解析
- 操作linux redis 常用命令
- Dagger2的依赖关系的分析和理解
- iOS多级跳转,返回指定viewcontroller
- js date 操作