2012-09-21 6 views
0

Bonjour 설정이 해제되어 있어도 호스트 이름을 사용하여 장치 (예 : 프린터)의 IP 주소를 식별 할 수 있는지 묻는 것이 좋습니다. 또한 어떻게 할 수 있습니까? 이 시나리오를 처리해야하는 iOS에서 앱을 개발 중입니다.Bonjour가 iOS에서 꺼져있을 때 호스트 이름을 사용하여 IP 주소 조회

CFHostStartInfoResolution

  • 한다 getaddrinfo하지만 장치의 봉쥬르이 설정되어 있으면 그들은 단지 작동 :

    나는 다음과 같은 살펴 보았다.

    +1

    'nameOfTheDevice.local'가 작동해야합니다. 적어도 내 iPhone과 SSH에서 작동합니다. –

    +0

    'nameOfTheDevice.local'은 (호스트 이름이 'nameOfTheDevice' 인 장치의) bonjour가 켜져있을 때만 작동합니다. – MiuMiu

    답변

    2

    호스트 이름 (예 : nameOfTheDevice)이 영역의 신뢰할 수있는 DNS 서버에 등록되어 있다고 가정하면 CFHost을 사용하여 주소 또는 호스트 이름을 조회 할 수 있습니다. 예 :

    NSString* hostname = @"nameOfTheDevice"; 
    CFHostRef hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname); 
    
    Boolean lookup = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); 
    NSArray* addresses = (NSArray*)CFHostGetAddressing(hostRef, &lookup); 
    
    [addresses enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
        NSString *strDNS = [NSString stringWithUTF8String:inet_ntoa(*((struct in_addr *)obj))]; 
         NSLog(@"Resolved %d->%@", idx, strDNS); 
        }]; 
    

    (오류 코드는 프로덕션 코드에 저장해야합니다.) DNS 서버가 그 호스트 이름을 인식하지 못한다면 할 수있는 일이 없다는 것을 명심하십시오. 특히 DHCP/DNS 서버가 내장 된 다양한 기능을 가진 가정용 네트워크에서 성공적인 조회를 수행 할 수 있다고 가정하는 것은 안전하지 않습니다.

    +0

    iOS에서는 NSHost를 사용할 수 없습니다. 그러나 CFHost는 그렇다. – JustSid

    +0

    불행히도'CFHost' 예제를 추가했지만 맥을 사용하지 않아서 시도하지 않았습니다 ... –

    관련 문제