2016-07-07 4 views
2

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 

내가 잘못하고 있니?

감사합니다.

답변

1

"내 LAN에서 UPnP 사용"이란 무엇을 의미합니까?

miniupnpd은 IGD 구현이며, 예를 들어 UPnP AV와는 아무런 관련이 없습니다.

miniupnpc와 함께 제공되는 listdevice 도구를 사용하여, 사용자 LAN에 존재하는 모든 UPnP를 장치를 검색합니다.

minissdpd은 네트워크에서 사용 가능한 UPnP 장치를 모니터링합니다. 장치 목록을 가져올 수있는 경우 libminiupnpc에서 사용합니다.

urn : schemas-upnp-org : device : InternetGatewayDevice : 1 (IGD) 유형의 요청 된 장치가있는 경우 1 개의 장치 만 반환하는 것이 좋습니다.

LAN에는 하나의 UPnP IGD가 있다고 생각합니다. 라우터.

실제로 얼마나 많은 클라이언트가 UPnP 네트워크에 연결 되더라도 ""이란 무엇을 의미합니까? ". UPnP 공식 용어에는 "클라이언트"와 같은 것이 없습니다. 네트워크에 UPnP 장치가 있고 제어 지점이

+0

답장을 보내 주셔서 감사합니다. 나는 용어 ​​"클라이언트"를 "장치"로 고정시켰다. "miniupnpc와 함께 제공되는 listdevice 도구 사용"은 무엇을 의미합니까? miniupnpc 코드베이스 (버전 1.6.20120509)에서 검색했지만 운이 없었습니다. 그것에 대해 더 많은 정보를 제공해 주시겠습니까? –

+0

버전 1.6.20120509는 매우 오래되었습니다. 업데이트하십시오. 최신 버전은 2.0입니다. https://github.com/miniupnp/miniupnp/blob/master/miniupnpc/listdevices.c – miniupnp

관련 문제