前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >gb28181协议详解_GB28181收费吗

gb28181协议详解_GB28181收费吗

作者头像
全栈程序员站长
发布于 2022-11-07 07:10:54
发布于 2022-11-07 07:10:54
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

1、http协议和ssdp协议

ssdp协议近似于http协议,事实上,和http协议相似得地方就是他得协议内容,当然,我们要去除他得端口和d类地址。

为什么我在给其他员工或者面试得时候要他人深入一些,理解一下http协议,是因为理解了http协议,掌握ssdp也就不远了,很多人可能会问:http协议有啥内容,无非就是get,post,put,delete 么,还能怎么样,我经常问他们一点:http协议怎么知道他结束了?

大部分面试者支支吾吾答不出来,就这么奇怪,有一部分人说socket.close(), socket 关闭是因为你知道结束了才关闭,不是因为关闭知道http协议结束。两个\r\n\r\n代表http协议内容部分结束,至于二进制,当然有content-length 字段去表述了。我们来看一下ssdp协议:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static const char* ssdp_search =
"M-SEARCH * HTTP/1.1"
"HOST: 239.255.255.250:1900"
"MAN: \"ssdp:discover\""
"MX: 5"
"ST: ssdp:all";

这代表了搜索所有设备,这样对否,能出结果否,在239.255.255.250 这种d类ip地址上,端口1900发出该字符串,应该收到很多设备发出得信息,例如摄像头信息,你一定会搜到,不过,这一段代码搜索不到?为什么?看正确得写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static const char* ssdp_search =
"M-SEARCH * HTTP/1.1\r\n"
"HOST: 239.255.255.250:1900\r\n"
"MAN: \"ssdp:discover\"\r\n"
"MX: 5\r\n"
"ST: ssdp:all\r\n\r\n";

虽然ssdp是udp协议,但是他依然需要\r\n来代表行结束,\r\n\r\n代表协议内容部分结束。这样,就会搜索到所有信息,当然了,我们可以使用过滤,只搜索部分协议,比如就是摄像头,其他设备忽略。

2、发现谁在发现

除了搜索设备,我们还需要知道谁往我们得服务地址发送了搜索地址得需求,因为我们是一个设备,其他在gb28181 服务中,我们需要知道sip 网守和网关得设备,可能有多个这种设备,我们则需要知道谁正需要发现设备,我们写出以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h> 
#include <winsock2.h> 
#include <ws2tcpip.h> 
#pragma comment(lib, "ws2_32.lib")
int main_2()
{ 

int iRet = 0;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in addr;
addr.sin_family = AF_INET;
//addr.sin_addr.S_un.S_addr = INADDR_ANY;
addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.129");
addr.sin_port = htons(1900);
bool bOptval = true;
iRet = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&bOptval, sizeof(bOptval));
if (iRet != 0) { 

printf("setsockopt fail:%d", WSAGetLastError());
return -1;
}
iRet = ::bind(sock, (sockaddr*)&addr, sizeof(addr));
if (iRet != 0) { 

printf("bind fail:%d", WSAGetLastError());
return -1;
}
printf("socket:%d bind success\n", sock);
// 加入组播 
ip_mreq multiCast;
//multiCast.imr_interface.S_un.S_addr = INADDR_ANY;
multiCast.imr_interface.S_un.S_addr = inet_addr("192.168.0.129");
multiCast.imr_multiaddr.S_un.S_addr = inet_addr("239.255.255.250");
iRet = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&multiCast, sizeof(multiCast));
if (iRet != 0) { 

printf("setsockopt fail:%d", WSAGetLastError());
return -1;
}
printf("udp group start\n");
int len = sizeof(sockaddr);
char strRecv[1500] = { 
 0 };
while (true)
{ 

memset(strRecv, 0, sizeof(strRecv));
iRet = recvfrom(sock, strRecv, sizeof(strRecv) - 1, 0, (sockaddr*)&addr, &len);
if (iRet <= 0) { 

printf("recvfrom fail:%d", WSAGetLastError());
return -1;
}
printf("recv data:%s\n", strRecv);
}
closesocket(sock);
WSACleanup();
return 0;
}

以上代码是windows示例,也可以用asio来制作,都一样。

可以看出有很多设备正在发ssdp协议,这样,找到自己感兴趣得ssdp设备,给他回信息就行。

3、标明我是谁

ssdp 简单服务发现协议最本质得关键还是在于服务得发现,反过来,不就是让对方发现我是谁,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static const char* ssdp_resinfo =
"HTTP/1.1 200 OK\r\n"
"CACHE-CONTROL:max-age=seconds\r\n"
"DATE:2022-07-09\r\n"
"EXT:\r\n"
"LOCATION: URL for UPnP description for root device\r\n"
"SERVER : OS / Version UPNP / 1.0 product / version\r\n"
"ST:search target\r\n"
"USN:advertisement UUID\r\n\r\n";

以下是摄像头返回得信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=3600
DATE: Tue, 02 Aug 2022 14:44:45 GMT
EXT:
LOCATION: http://192.168.0.64:49152/upnpdevicedesc.xml
SERVER: Linux/4.9.37, UPnP/1.0, Portable SDK for UPnP devices/1.6.21
ST: urn:schemas-upnp-org:service:EmbeddedNetDeviceControl:1
USN: uuid:Upnp-iDS-ECD8012-M/E-1_0-F84224570::urn:schemas-upnp-org:service:EmbeddedNetDeviceControl:1

使用http协议解析以后,在获取LOCATION 地址,使用httpclient 访问地址,返回如下xml内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:DigitalSecurityCamera:1</deviceType>
<friendlyName>HIKVISION iDS-ECD8012-M/E - F84224570</friendlyName>
<manufacturer>HIKVISION</manufacturer>
<manufacturerURL>http://www.hikvision.com</manufacturerURL>
<modelDescription>IP Camera</modelDescription>
<modelName>HIKVISION iDS-ECD8012-M/E</modelName>
<modelNumber>iDS-ECD8012-M/E</modelNumber>
<modelURL>http://www.hikvision.com</modelURL>
<serialNumber>F84224570</serialNumber>
<UDN>uuid:Upnp-iDS-ECD8012-M/E-1_0-F84224570</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:EmbeddedNetDeviceControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:EmbeddedNetDeviceControl</serviceId>
<controlURL>/</controlURL>
<eventSubURL>/</eventSubURL>
<SCPDURL>/</SCPDURL>
</service>
</serviceList>
<presentationURL>http://192.168.0.64:80</presentationURL>
</device>
</root>

从中可以发现很多信息 那么现在我们得GB28181 服务有sip 服务,网关服务,中心节点服务,存储服务,推理服务,我们就必须标明自己得设备,并且写好XML文件,让对方获取,我们当然不必墨守成规,可以改成其他形式得文件,不过要考虑兼容性。

封装测试

在ssdp协议封装过程中,最为重要得一定是这个注意点,就是本机IP和主播地址IP,我们必须设置两个地址,在windows里面和linux下表现不同,必须要注意

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(int argc, char* argv[])
{ 

asio::io_context io_service;
receiver r(io_service,
asio::ip::address::from_string("192.168.0.129"),
asio::ip::address::from_string("239.255.255.250"));
thread t([&r,&io_service] { 

r.do_init("192.168.0.129");
r.StartTimer();
io_service.run();
});
while (1)
{ 

Sleep(3000);
}
return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183326.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
ATT&CK视角下的红蓝对抗:十六.横向移动之利用Windows计划任务进行横向移动
Windows计划任务是一个非常实用的功能,可以帮助我们自动完成一些重复性的任务。比如,我们可以设定一个计划任务来自动备份文件、更新软件、执行脚本等,本文主要介绍了如何利用Windows计划任务进行横向渗透。
一只特立独行的兔先生
2023/11/13
5760
ATT&CK视角下的红蓝对抗:十六.横向移动之利用Windows计划任务进行横向移动
ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透
本文介绍了利用ICMP协议进行隧道穿透的方法。ICMP协议不需要开放端口,可以将TCP/UDP数据封装到ICMP的Ping数据包中,绕过防火墙限制。常见的ICMP隧道穿透工具有Icmpsh、Icmptunnel、Pingtunnel等。本文以ICMPsh和Pingtunnel为例,介绍了如何利用ICMP协议进行隧道穿透。
一只特立独行的兔先生
2023/11/12
6170
ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/02
1.7K1
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透
ATT&CK视角下的红蓝对抗:七.内网穿透之利用Venom进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/04
9420
ATT&CK视角下的红蓝对抗:七.内网穿透之利用Venom进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/01
1.5K0
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
ATT&CK视角下的红蓝对抗:十七.横向移动之利用远程服务进行横向渗透
在Windows中,服务是指在Windows操作系统中运行的后台程序。在Windows中可以配置特定事件发生时执行某项服务,或按需启动。它们通常用于执行系统级任务,例如执行定时任务、管理网络连接或监控系统性能。在Windows中创建服务,我们可以指定运行者权限,并且设置启动类型为自动、手动或禁用。Windows提供了SCM用作服务管理,而我们可以通过sc或者Windows API——OpenSCManagerA——来远程连接SCM管理Windows服务。
一只特立独行的兔先生
2023/11/14
4810
ATT&CK视角下的红蓝对抗:十七.横向移动之利用远程服务进行横向渗透
ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/03
1.3K0
ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透
ATT&CK视角下的红蓝对抗:十四.内网穿透之反弹流量分析与检测方法
这里以反弹shell为案例,讲解检测方法手段,假设在内网后渗透阶段,当攻击者获取到管理权限,为了进一步扩大攻击范围在进行横向渗透时,通常会使用到反弹shell的方法获取主机权限,针对反弹shell这种攻击方法,可以根据反弹shell的特征去识别检测,反弹shell传输的数据是以明文方式进行传输的,很容易使用流量分析检测到,对流量特征进行溯源分析检测其带入的攻击特征,即可复现到过程。
一只特立独行的兔先生
2023/11/11
1.1K0
ATT&CK视角下的红蓝对抗:十四.内网穿透之反弹流量分析与检测方法
ATT&CK视角下的红蓝对抗:十九.横向移动之利用PTH(哈希传递)进行横向渗透
PTH(Pass The Hash,哈希传递)攻击是一种很典型的内网渗透攻击方式。它是通过寻找账号相关的密码散列值(通常是NTLM哈希值)进行NTLM认证,在Windows中应用程序需要用户提供明文密码,最后调用LsalogonUser之类的API将密码进行转换,转换后在NTLM身份认证时将哈希值发送给远程服务器,而这个网络认证之间的过程其实并不需要明文密码。也就是说,利用这个机制,攻击者可以不提供明文密码,而是通过NTLM哈希或者LM哈希进行远程访问。
一只特立独行的兔先生
2023/11/16
6850
ATT&CK视角下的红蓝对抗:十九.横向移动之利用PTH(哈希传递)进行横向渗透
ATT&CK视角下的红蓝对抗:十八.横向移动之利用WinRM进行横向渗透
WinRM的远程管理服务是微软的WS-Management协议的实现。WS-Management协议是基于简单对象访问协议(SOAP)的防火墙友好的协议。在Windows 2008以上版本的操作系统中,WinRM服务都是自动开启的。WinRM的默认管理端口为5985。本篇文章将会介绍如何通过WinRM进行横向渗透。
一只特立独行的兔先生
2023/11/15
6100
ATT&CK视角下的红蓝对抗:十八.横向移动之利用WinRM进行横向渗透
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
假设在内网环境中发现主机,通过漏洞获取到该主机控制权限,想要进一步对内网环境进行后续利用,这里可以通过反弹shell的方式去进行穿透,本次实验以nc工具为例来演示不同系统的操作,实验拓扑如图1-1所示。
一只特立独行的兔先生
2023/10/31
1.3K1
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
ATT&CK视角下的红蓝对抗:十三.内网穿透之Linux文件传输技巧详解
在“后渗透测试阶段”中,假设当我们获取到了服务器的权限后,此服务器中没有压缩工具,但又需要将一个文件传输至本地计算机中查看,此时我们会用到文件打包、文件传输等技术。简单来说“文件传输技术”就是在目标服务器中获取的信息传递出来的一系列技术。下面将介绍一下具体Linux文件传输技巧详解。
一只特立独行的兔先生
2023/11/10
4771
ATT&CK视角下的红蓝对抗:十三.内网穿透之Linux文件传输技巧详解
ATT&CK视角下的红蓝对抗:二十一.横向移动之利用Psexec进行横向渗透
Psexec最早由Mark Russinovich创建并发布在Sysinternals Suite上,Sysinternals Suite是微软发布的工具程序集。Psexec的设计目的是替代telnet来帮助系统管理员进行远程管理。我们使用Psexec,可以通过SMB协议在远程主机上运行命令,我们无须在远程主机上面安装任何客户端程序就可以远程管理,并且可以获得一个强交互的命令控制台。
一只特立独行的兔先生
2023/11/18
6380
ATT&CK视角下的红蓝对抗:二十一.横向移动之利用Psexec进行横向渗透
ATT&CK视角下的红蓝对抗:十.内网穿透之利用DNS协议进行隧道穿透
DNS隧道(DNS Tunneling)也是隐蔽隧道的一种方式,通过将其他协议封装在DNS协议中传输建立通信。大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS隧道提供了条件,可以利用它实现诸如远程控制、文件传输的操作。使用dns搭建隧道的工具也有很多,比如dnscat2、DNS2tcp、iodine等。由于iodine工具使用比较稳定,这里使用iodine进行演示,它可以通过一台dns服务器制作一个Ipv4通道,iodine分为客户端和服务端,Iodine不仅有强制密码措施,还支持多种DNS记录类型,而且支持16个并发连接,因此很多时候Iodine是DNS隧道的第一选择。
一只特立独行的兔先生
2023/11/07
8620
ATT&CK视角下的红蓝对抗:十.内网穿透之利用DNS协议进行隧道穿透
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
从技术层面来讲,隧道是一种通过互联网的基础设施在网络之间传递数据的方式,其中包括数据封装、传输和解包在内的全过程,使用隧道传递的数据(或负载)可以使用不同协议的数据帧或包。
一只特立独行的兔先生
2023/10/29
1.6K1
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
ATT&CK视角下的红蓝对抗:二十二.横向移动之利用RDP进行横向渗透
横向移动是网络攻击中的一个阶段,攻击者在获得对网络中某一系统的访问权限后,尝试访问其他系统以拓展其控制范围。利用RDP(远程桌面协议)进行横向渗透是一种常见的方法,主要因为RDP(远程桌面协议)是微软开发的一种协议,它允许用户通过网络连接到另一台电脑。这种连接允许远程用户在其本地计算机上看到并控制另一台电脑的桌面界面。这在远程工作、IT支持和远程系统管理中非常有用,本篇文章主要针对了RDP(远程桌面协议)在横向移动中的进行了介绍。
一只特立独行的兔先生
2023/11/19
1.2K0
ATT&CK视角下的红蓝对抗:二十二.横向移动之利用RDP进行横向渗透
ATT&CK视角下的红蓝对抗:九.内网穿透之利用GRE协议进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/06
5230
ATT&CK视角下的红蓝对抗:九.内网穿透之利用GRE协议进行隧道穿透
ATT&CK视角下的红蓝对抗:二十.横向移动之利用PTT(票据传递)进行横向渗透
PTT(Pass the Ticket,票据传递)攻击是一种使用Kerberos票据代替明文密码或NTLM哈希的方法。这种攻击手段可以用Kerberos票据进行内网横向渗透,不需要管理员权限,它最常见的用途可能是使用黄金票据和白银票据,通过票据传递访问主机,其利用方法十分简单。例如,通过这种手段,攻击者可以从Linux系统中窃取Kerberos凭据,然后在身份验证时将其传递到Windows机器上,达到横向渗透的结果。
一只特立独行的兔先生
2023/11/17
6340
ATT&CK视角下的红蓝对抗:二十.横向移动之利用PTT(票据传递)进行横向渗透
ATT&CK视角下的红蓝对抗:八.内网穿透之利用Termite进行隧道穿透
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
一只特立独行的兔先生
2023/11/05
7210
ATT&CK视角下的红蓝对抗:八.内网穿透之利用Termite进行隧道穿透
最好用的内网穿透工具合集
在渗透过程中,我们需要快速实现内网穿透,从而绕过网络访问限制,直接从外网来访问内网。今天,我们来推荐几款非常好用的内网穿透工具,如有其它推荐,欢迎补充和指正。
Bypass
2020/09/08
8.1K1
最好用的内网穿透工具合集
推荐阅读
ATT&CK视角下的红蓝对抗:十六.横向移动之利用Windows计划任务进行横向移动
5760
ATT&CK视角下的红蓝对抗:十五.内网穿透之利用ICMP协议进行隧道穿透
6170
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用HTTP协议进行隧道穿透
1.7K1
ATT&CK视角下的红蓝对抗:七.内网穿透之利用Venom进行隧道穿透
9420
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
1.5K0
ATT&CK视角下的红蓝对抗:十七.横向移动之利用远程服务进行横向渗透
4810
ATT&CK视角下的红蓝对抗:六.内网穿透之利用FRP进行隧道穿透
1.3K0
ATT&CK视角下的红蓝对抗:十四.内网穿透之反弹流量分析与检测方法
1.1K0
ATT&CK视角下的红蓝对抗:十九.横向移动之利用PTH(哈希传递)进行横向渗透
6850
ATT&CK视角下的红蓝对抗:十八.横向移动之利用WinRM进行横向渗透
6100
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
1.3K1
ATT&CK视角下的红蓝对抗:十三.内网穿透之Linux文件传输技巧详解
4771
ATT&CK视角下的红蓝对抗:二十一.横向移动之利用Psexec进行横向渗透
6380
ATT&CK视角下的红蓝对抗:十.内网穿透之利用DNS协议进行隧道穿透
8620
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
1.6K1
ATT&CK视角下的红蓝对抗:二十二.横向移动之利用RDP进行横向渗透
1.2K0
ATT&CK视角下的红蓝对抗:九.内网穿透之利用GRE协议进行隧道穿透
5230
ATT&CK视角下的红蓝对抗:二十.横向移动之利用PTT(票据传递)进行横向渗透
6340
ATT&CK视角下的红蓝对抗:八.内网穿透之利用Termite进行隧道穿透
7210
最好用的内网穿透工具合集
8.1K1
相关推荐
ATT&CK视角下的红蓝对抗:十六.横向移动之利用Windows计划任务进行横向移动
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验