gpt4 book ai didi

c - miniupnpsssdpd 查询已连接设备数失败

转载 作者:太空狗 更新时间:2023-10-29 12:26:35 36 4
gpt4 key购买 nike

我在 openWRT linux 环境中工作,并尝试在我的 LAN 网络上启用 UPnP,同时在任何给定点监控连接的设备。

为此,我在系统中启用了 miniupnpd 以及 minissdpd。

我编写了以下函数,用于调查 minissdpd 以试图了解当前连接了哪些设备(基于 minissdpd 代码所有者示例):

static int query_connectedDevices(void)
{
struct sockaddr_un addr;
int s, nRet = 0;
const char * minissdpdsocketpath = "/var/run/minissdpd.sock";
unsigned char buffer[2048];
unsigned char * p;
const char * device = "urn:schemas-upnp-org:device:InternetGatewayDevice:1";
int device_len = (int)strlen(device);

/*Open communication socket with minissdpd process*/
s = socket(AF_UNIX, SOCK_STREAM, 0);
if(s < 0) {
return -1;
}
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, minissdpdsocketpath, sizeof(addr.sun_path));
if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) {
return -1;
}

buffer[0] = 1; /* request type 1 : request devices/services by type */
p = buffer + 1;
CODELENGTH(device_len, p);
memcpy(p, device, device_len);
p += device_len;
nRet = write(s, buffer, p - buffer);
if (nRet < 0) {
goto query_exit;
}
memset(buffer, 0x0, sizeof(buffer));
nRet = read(s, buffer, sizeof(buffer));
if (nRet < 0) {
goto query_exit;
}

nRet = 0;

query_exit:
close (s);
return nRet;


}

我的问题是无论有多少设备实际连接到 UPnP 网络,我总是从 minissdpd 收到值“1”。

取自 minissdpd 页面 -

For these three request types, the responses is as following :

The first byte (n) is the number of devices/services in the response For each service/device, three Strings : Location (url), service type (ST: in M-SEARCH replies) and USN (unique id).

**编辑 -

我已经尝试触发所有 3 种支持的请求类型,这些是响应,请注意空读回 =""表示没有数据被读回:

Buffer value = 3urn:schemas-upnp-org:device:InternetGatewayDevice:1
Buffer value read back = return value = 1
Buffer value = 3urn:schemas-upnp-org:device:InternetGatewayDevice:1
Buffer value read back = return value = 1
Buffer value = 3urn:schemas-upnp-org:device:InternetGatewayDevice:1
Buffer value read back = $http://192.168.1.1:5000/rootDesc.xml/urn:schemas- upnp-org:service:Layer3Forwarding:1Zuuid:27f10a12-a448-434f-9b33- 966bcf662cc3::urn:schemas-upnp- org:service:Layer3Forwarding:1$http://192.168.1.1:5000/rootDesc.xml.urn:schemas- upnp-org:service:WANIPConnection:1Yuuid:27f10a12-a448-434f-9b33- 966bcf662cc3::urn:schemas-upnp- org:service:WANIPConnection:1$http://192.168.1.1:5000/rootDesc.xmlupnp:rootdevic e:uuid:27f10a12-a448-434f-9b33-966bcf662cc3::upnp:rootdevice return value = 463

我做错了什么吗?

谢谢!

最佳答案

“在我的 LAN 上启用 UPnP”是什么意思?

miniupnpd 是一个 IGD 实现,它与 UPnP AV 无关。

要发现 LAN 上存在的所有 UPnP 设备,您可以使用 miniupnpc 提供的 listdevice 工具。

minissdpd 监控网络上可用的 UPnP 设备。如果可用,libminiupnpc 会使用它来获取设备列表。

当请求类型为 urn:schemas-upnp-org:device:InternetGatewayDevice:1 (IGD) 的设备时,它只返回 1 个设备是可以的。

我猜你的 LAN 上只有一个 UPnP IGD:路由器。

无论有多少客户端实际连接到 UPnP 网络。”是什么意思? UPnP 官方术语中没有“客户端”这样的东西。网络上有 UPnP 设备和控制点

关于c - miniupnpsssdpd 查询已连接设备数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245656/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com