【发布时间】:2016-07-07 12:37:06
【问题描述】:
我在 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 页面 -
对于这三种请求类型,响应如下:
第一个字节 (n) 是响应中的设备/服务的数量 对于每个服务/设备,三个字符串:位置(url),服务类型 (ST:在 M-SEARCH 回复中)和 USN(唯一 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
我是不是做错了什么?
谢谢!
【问题讨论】:
标签: c linux networking openwrt upnp