我正在openWRT linux環境中工作,並嘗試在我的LAN網絡上啓用UPnP,同時在任何給定點監視連接的設備。miniupnpssdpd查詢連接設備數量失敗
爲此,我啓用了系統中的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
我做錯了什麼?
謝謝!
感謝您的回答。我將術語「客戶」固定爲「設備」。 「使用miniupnpc提供的listdevice工具」是什麼意思?我在miniupnpc代碼庫(版本1.6.20120509)中搜索它,但沒有運氣。你能否提供更多關於它的信息? –
版本1.6.20120509非常舊。請更新。最新版本是2.0。 https://github.com/miniupnp/miniupnp/blob/master/miniupnpc/listdevices.c – miniupnp