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'
첫번째 바이트 (N) 각각에 대한 응답 의 디바이스/서비스의 수는 : - minissdpd 페이지에서 촬영
이 세 요청 유형의
, 반응은 다음과 같다 서비스/장치, 3 개의 문자열 : 위치 (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