1 Dos命令
Matlab可以调用Dos命令来抓取网口数据包。
dos(['"D:\Program Files\Wireshark\dumpcap" -B 1 -i 4 -w ' fileName '.cap -c' int2str(capPktNum) ' -f "src host 192.168.1.10 && udp"']);
其中"D:\Program Files\Wireshark\dumpcap"是调用Wireshark安装目录下的dumpcap工具进行抓包;
-B 1:设置内核缓冲区大小为1MB;
-i 4:指定捕获第4号网络接口;第几号网口接口可以通过wireshark上进行观察;
-w ' fileName '.cap:将捕获结果写入文件,文件名由变量fileName加上.cap扩展名组成;
-c' int2str(capPktNum) ':捕获指定数量的数据包后停止,数量由变量capPktNum决定;
-f "src host 192.168.1.10 && udp":捕获过滤器,捕获源IP为192.168.1.10的udp数据包。
2 pcap2matlab解包
可以采用pcap2matlab开源包对前面使用Dos命令抓取的cap文件进行解析。
pcap2matlab可以从GitHub上直接下载:
下载后将pcap2matlab文件夹添加到Matlab的搜索路径。
最后再将wireshark安装目录下的tshark.exe和所有dll都复制到matlab的bin/win64目录下即可。
随后便可通过下面的代码对前进抓取的cap文件进行解析,解析到是数据段的报文。如果解析报错,可以看下参考资料链接里博主的方式进行操作;或者降低下wireshark版本,我测试过版本太高也会报错。
filename_or_interface=[fileName,'.cap'];
filter = 'data';
decodeas_and_dissector = {'data.data'};
pcap_result= pcap2matlab(filter, decodeas_and_dissector, filename_or_interface);
wireshark各版本下载地址:https://1.as.dl.wireshark.org