最近在熟悉IP摄像头的网络通讯,做了个简单的实例,现在整理一下思路。
大概就是拿到一个大华IP摄像头,wireshark抓包分析它是如何回应大华客户端发出的广播包,然后通过Linux创建UDP,模拟ip摄像头设备发出同样的广播包。然后在大华的视频客户端点击自动搜索的时候能搜索到一个虚拟的IP摄像头设备。但是这个设备是不存在的,只是个虚拟的。
首先我们需要通过抓包工具,查看当我们点击自动搜索时,我们的摄像头设备是如何回应客户端发送的广播包的。图中 192.168.1.36是我的设备。
图中蓝色部分的UDP协议就是当点击自动搜素时发送的广播包,我的设备回应的包就是长度为839的包,其中真正的数据长度为797。
查看原始数据如图。
分析数据包的工作做完后,就可以开始模拟了。我所使用的方法时在linux下创建UDP发送相同的包,让大华客户端识别。下面是UDP的代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<netdb.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<arpa/inet.h>
#define BUFFER_SIZE 794
int main(){
int sockListen;
int recvbytes;
char recvbuf[128];
char buffer[BUFFER_SIZE] = {0x20, 0x00, 0x00, 0x00, 0x44, 0x48, 0x49, 0x50,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfd, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfd, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0

1万+

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



