Bonjour를 사용하는 방법?


26
  1. 먼저 Bonjour는 정확히 무엇을합니까 (내 추측은 다음과 같습니다)?
    여기서 Bonjour를 사용하면 IP 네트워크에서 컴퓨터, 장치 및 서비스를 자동으로 검색 할 수 있습니다. 그러나 "IP 네트워크의 장치 검색"뿐만 아니라 Bonjour가 실행중인 장치에 IP 주소를 할당하여 IP 네트워크를 생성한다고 생각했습니다. 내가 맞아?

  2. 그리고 나는 여전히 본질을 그리워합니다. 다음과 같은 방식으로 작동합니까? 먼저 잠재적으로 서로 통신 할 수 있도록 장치 (예 : 랩톱)를 물리적으로 연결합니다. 그런 다음 일부 랩톱에서 Bonjour를 실행 한 다음이 랩톱에서 자동으로 IP 주소를 자동으로 할당합니다. 따라서 Bonjour가 실행되는 랩톱은 IP 네트워크를 구축합니다. 이런 식으로 작동합니까?

  3. 또는 Bonjour를 실행하는 컴퓨터는 서비스로 간주되지 않으며 Bonjour가이 컴퓨터에서 실행 중이기 때문에 자체 브로드 캐스트되지 않습니다. 컴퓨터에서 실행되는 응용 프로그램은 Bonjour를 사용하여 브로드 캐스트해야합니다. 따라서 (컴퓨터가 아닌) 스스로 브로드 캐스트하는 응용 프로그램이며 자동으로 수행되지 않습니다 (응용 프로그램은 명시 적으로 브로드 캐스트해야 함). 맞아?

  4. 내 응용 프로그램이 정확히 어떻게 브로드 캐스트 할 수 있습니까? 명령 줄을 사용하여 서비스를 등록 할 수 있습니까 (Bonjour를 사용하는 모든 응용 프로그램이 새로운 서비스가 나타났음을 알 수 있습니까)?

  5. 또한 Bonjour가 만든 IP 네트워크를 사용하는 응용 프로그램을 갖고 싶습니다. 이를 위해 내 응용 프로그램은 네트워크에 어떤 장치 / 서비스가 있는지 알아야합니다. 자세한 내용은 응용 프로그램에 서비스 목록이 필요합니다. 목록의 각 서비스에는 이름, 서비스가 실행중인 IP 주소 및 응용 프로그램에서 사용하는 포트가 있어야합니다. Bonjour가이 정보를 어떤 방식으로 제공 할 수 있습니까? 이 경우 정확히 작동합니다. 내 프로그램이 Bonjour에서이 정보를 얻는 방법은 무엇입니까? 내 프로그램이 Bonjour가 작성하고 위에서 언급 한 정보가 포함 된 파일을 읽을 수 있습니까? 이 정보를 검색하기 위해 명령 행에서 일부 명령을 사용할 수 있습니까?

  6. 파일, 환경 변수 또는 명령 줄의 명령에서 서비스 정보에 액세스하는 데 특별한 관심이 있습니다. 이 옵션은 가장 간단한 것 같습니다! 이 경우 특정 프로그래밍 언어에서 Bonjour와 통신하기 위해 추가 라이브러리를 사용할 필요가 없습니다.

PS Pleas가 내 질문에 분명하지 않은 경우 질문합니다. 더 명확한 방법으로 질문을 작성하려고 노력할 것입니다.

PPS Windows 7을 사용합니다 .

ADDED : PHP로 애플리케이션을 작성할 계획입니다. 모든 컴퓨터는 Apache 웹 서버를 실행해야합니다. 그리고 Bonjour를 사용하여 컴퓨터가 서로를 발견하도록 돕고 싶습니다 (컴퓨터가 로컬 네트워크에서 작동 중임).

답변:


54
  1. 예. Apple의 Rendezvous / Bonjour의 주요 관리자 인 Stuart Cheshire는 IETF ZeroConf 워킹 그룹을 공동으로 이끌고 Zero Configuration Networking에 관한 O'Reilly 책을 썼다. 다리가있는 발판”:

    1. IPv4 (및 IPv6) 링크 로컬 주소 지정
    2. 멀티 캐스트 이름 확인 (mDNS)
    3. DNS-SD (DNS 서비스 검색)

    IETF ZeroConf 워킹 그룹과 Apple은 모두 링크 로컬 주소 지정, 특히 IPv4 링크 로컬 주소 지정 ( 169.254.0.0/16주소)을 ZeroConf / Bonjour의 일부로 간주합니다. 링크 로컬 주소 지정 은 다른 두 "대변"보다 몇 년 전에 제공 되었음에도 불구하고 말입니다.

    Windows는 Apple의 Windows 용 Bonjour 소프트웨어가 설치되어 있지 않아도 이미 자동 링크 로컬 주소 지정을 지원하므로 많은 Windows 사용자는 IPv4 링크 로컬 주소 지정이 Bonjour / ZeroConf의 일부라고 생각하지 않습니다.

  2. 예. Mac 및 Windows 시스템은 기본적으로 IPv4 링크 로컬 주소 지정이 DHCP 용으로 구성되었지만 사용 가능한 DHCP 서버가없는 경우 주소 지정을 수행합니다. Avahi (또는 다른 ZeroConf 구현)가 설치된 Linux 및 BSD 시스템도이 작업을 수행합니다.

  3. 컴퓨터에서 Bonjour를 실행중인 경우 호스트 이름은 mDNS를 통해 LAN에 게시됩니다. 컴퓨터 이름이 "Alice"인 경우 Alice.localmDNS를 통해 사용됩니다. 동일한 LAN (특히 동일한 링크 로컬 멀티 캐스트 도메인)의 다른 컴퓨터 ( "Bob"이라고 함)에서 간단히 입력 할 수 있어야 ping Alice.local하며 Bob은 Alice.localAlice의 IP 주소를 검색하기 위해 mDNS 조회를 수행해야 합니다 ( es) 및 주소 중 하나를 핑 (ping)합니다.

    그러나 Bonjour는 호스트 이름과 서비스 이름을 구분합니다. 예를 들어 Alice에 연결된 "HP"와 "Canon"이라고하는 두 개의 개별 USB 프린터가 있고 Alice가 lpr두 프린터 의 프린트 서버 역할을하는 경우 각각 고유 한 서비스로 표시 될 수 있습니다. Alice.local호스트로 다시 매핑됩니다 .

    서비스 이름은 Alice에 대한 언급없이 사용자에게“HP”및“Canon”으로 표시됩니다. 배후에서 이들은로 알려져 HP._printer._tcp.local있으며 Canon._printer._tcp.local, 해당 서비스 이름에 대한 DNS-SD 조회는 해당 서비스가 Alice.local두 개의 다른 TCP 포트에서 사용 가능하다는 것을 보여줍니다 .

    따라서 응용 프로그램은 Bonjour 데몬 ( mDNSResponderApple 구현에서 호출 )에 광고하려는 서비스가 있음을 알려야합니다 . macOS에는 기본적으로 Bonjour를 인식하지 않는 레거시 서비스에 대한 서비스 광고를 자동으로 처리하는 메커니즘이 있습니다. 예를 들어, macOS sshd는 Bonjour를 직접 지원하지 않는 OpenSSH이지만 macOS는 sshBonjour를 통해 서비스 광고를 처리 하므로 ssh username@Alice.localLAN의 다른 시스템 에서만 가능 합니다.

  4. macOS에는 다음 구문을 사용하여 서비스를 등록 할 수있는 "dns-sd"명령 줄 도구가 있습니다.

    dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]  
    # (Register a service)
    

    예를 들어 :

    dns-sd -R MyWebsite _http._tcp local 80
    

    Windows 용 Bonjour 또는 Windows 용 Bonjour SDK에 포함되어 있거나 Apple의 mDNSResponder 오픈 소스 프로젝트 에서 Windows 용으로 컴파일 할 수 있다면 놀라지 않을 것입니다 . 에 대한 인터넷 검색 dns-sd.exe, 나는 그런 것이 존재하는 것을 본다. 나는 단지 바이너리를 다운로드 할 것이라고 확신하지 못한다. 대신 위에서 언급 한 패키지 중 하나에서 가져 오거나 mDNSResponder 프로젝트 소스에서 직접 컴파일하려고합니다.

  5. dns-sd명령 줄 도구를 사용하여 서비스를 찾아서 찾을 수도 있습니다. 로컬 웹 서비스를 찾는 예는 다음과 같습니다.

    다음을 사용하여 로컬 웹 서비스를 찾아보십시오 -B.

    $ dns-sd -B _http._tcp local  
    Browsing for _http._tcp.local  
    Timestamp     A/R Flags if Domain                    Service Type              Instance Name  
    16:30:59.870  Add     3  6 local.                    _http._tcp.               My Cool Web App  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               Someone Else's Web Service  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               A Third One  
    ^C
    

    내가 원하는 "My Cool Web App"을 다음과 -L같이 찾으십시오 .

    $ dns-sd -L "My Cool Web App" _http._tcp local  
    Lookup My Cool Web App._http._tcp.local  
    16:31:52.678  My\032Cool\032Web\032App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6)  
    ^C  
    

    다음을 사용하여 MyWebServer.local의 IP 주소를 조회하십시오 -Q.

    $ dns-sd -Q MyWebServer.local  
    Timestamp     A/R Flags if Name                             T   C Rdata  
    16:32:40.786  Add     2  6 MyWebServer.local.               1   1 169.254.45.209  
    ^C  
    

    이 예 Ctrl-C에서는 dns-sd도구 에서 벗어나야합니다. 그렇지 않으면 계속 열려 있고 네트워크를 지속적으로 감시하고 사용자가 실행 한 쿼리 결과 (예 : -B찾아보기 쿼리를 열어 둔 상태에서 웹 서버가 네트워크를 오가는 등)에 대한 변경 사항을보고합니다 . 나는 이것과 다른 이유로 인해 dns-sd도구가 스크립트에서 호출되는 데 적합하지 않다는 것을 알았습니다 . 결국 선호하는 언어에 대한 ZeroConf 라이브러리를 확인하고 싶을 수도 있습니다.

다른 질문 중 하나에 대답하기 위해 파일을 읽거나 쓰는 것만으로 쿼리를 수행하고 결과를 얻을 수있는 ZeroConf 구현을 알지 못합니다. Bonjour를 사용하는 대부분의 앱은 API를 직접 호출하거나 (C / C ++ / Obj-C / Swift 앱) 언어 별 라이브러리 (통역 / 스크립트 언어)를 통해 API를 호출하여 사용합니다.


내가 본 Bonjour / Zeroconf에 대한 최고의 설명. wikipedia article :)에 참여해야합니다.
Kamil Kisiel

DNS 레코드 사용 방법을 확장하고 싶다면 serverfault.com/questions/18565/…
andrewtj

4

먼저 Bonjour는 정확히 무엇을합니까 (내 추측은 다음과 같습니다)? 여기서 Bonjour를 사용하면 IP 네트워크에서 컴퓨터, 장치 및 서비스를 자동으로 검색 할 수 있습니다. 그러나 "IP 네트워크의 장치 검색"뿐만 아니라 Bonjour가 실행중인 장치에 IP 주소를 할당하여 IP 네트워크를 생성한다고 생각했습니다. 내가 맞아?

좀 빠지는; Jon이 지적했듯이 DHCP (보통)는 IP 주소를 할당하는 데 사용됩니다. 일반 DNS가 도메인 이름을 IP 주소로 변환하는 것과 거의 비슷한 방식으로 Bonjour는 로컬 도메인 내에서 임시 도메인 이름을 제공하는 IP 주소로 변환하는 데 사용됩니다.

그리고 나는 여전히 본질을 그리워합니다. 다음과 같은 방식으로 작동합니까? 먼저 잠재적으로 서로 통신 할 수 있도록 장치 (예 : 랩톱)를 물리적으로 연결합니다. 그런 다음 일부 랩톱에서 Bonjour를 실행 한 다음이 랩톱에서 자동으로 IP 주소를 자동으로 할당합니다. 따라서 Bonjour가 실행되는 랩톱은 IP 네트워크를 구축합니다. 이런 식으로 작동합니까?

아니; 랩톱은 대개 로컬 DHCP 서버에서 IP 주소를 가져옵니다. Bonjour는 각 직원이 다른 서비스를 제공 할 수있는 서비스를 제공합니다.

또는 Bonjour를 실행하는 컴퓨터는 서비스로 간주되지 않으며 Bonjour가이 컴퓨터에서 실행 중이기 때문에 자체 브로드 캐스트되지 않습니다. 컴퓨터에서 실행되는 응용 프로그램은 Bonjour를 사용하여 브로드 캐스트해야합니다. 따라서 (컴퓨터가 아닌) 스스로 브로드 캐스트하는 응용 프로그램이며 자동으로 수행되지 않습니다 (응용 프로그램은 명시 적으로 브로드 캐스트해야 함). 맞아?

예, 일반적으로 응용 프로그램은 해당 응용 프로그램의 존재를 명시 적으로 광고해야합니다. 이것은 종종 시스템 제공 라이브러리 (OS X에서 공통) 또는 사용자 정의 라이브러리 (예 : perl 's Net :: Bonjour)를 사용하여 수행 할 수 있습니다.

내 응용 프로그램이 정확히 어떻게 브로드 캐스트 할 수 있습니까? 명령 줄을 사용하여 서비스를 등록 할 수 있습니까 (Bonjour를 사용하는 모든 응용 프로그램이 새 서비스가 있음을 알 수 있도록)

나는 이것을하는 명령 줄 도구를 모른다. 그러나 많은 주요 프로그래밍 언어는 이것을 할 수있는 라이브러리를 가지고있다.

또한 Bonjour가 만든 IP 네트워크를 사용하는 응용 프로그램을 갖고 싶습니다. 이를 위해 내 응용 프로그램은 네트워크에 어떤 장치 / 서비스가 있는지 알아야합니다. 자세한 내용은 응용 프로그램에 서비스 목록이 필요합니다. 목록의 각 서비스에는 이름, 서비스가 실행중인 IP 주소 및 응용 프로그램에서 사용하는 포트가 있어야합니다. Bonjour가이 정보를 어떤 방식으로 제공 할 수 있습니까?

대부분의 Bonjour 라이브러리는이 작업을 수행 할 수 있어야합니다. http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm 의 첫 번째 예를 참조하십시오.

이 경우 정확히 작동합니다. 내 프로그램이 Bonjour에서이 정보를 얻는 방법은 무엇입니까? 내 프로그램이 Bonjour가 작성하고 위에서 언급 한 정보가 포함 된 파일을 읽을 수 있습니까? 이 정보를 검색하기 위해 명령 행에서 일부 명령을 사용할 수 있습니까?

적절한 라이브러리를 사용하여 프로그램은 Bonjour 프로토콜을 사용하여 로컬 네트워크의 다른 모든 컴퓨터에 사용 가능한 서비스를 알려줍니다. 그러면 해당 라이브러리는 응답을 구문 분석하여보다 유용한 형식으로 사용자에게 제시합니다.

파일, 환경 변수 또는 명령 줄의 명령에서 서비스 정보에 액세스하는 데 특별한 관심이 있습니다. 이 옵션은 가장 간단한 것 같습니다! 이 경우 특정 프로그래밍 언어에서 Bonjour와 통신하기 위해 추가 라이브러리를 사용할 필요가 없습니다.

나는 이것을하는 도구를 알지 못하지만 존재할 수 있습니다.

PS Pleas가 내 질문에 분명하지 않은 경우 질문합니다. 더 명확한 방법으로 질문을 작성하려고 노력할 것입니다.

작성중인 프로그램과 작성중인 언어에 대한 추가 정보가 있으면 도움이 더 쉬울 것입니다.

더 많은 정보를 얻으려면 다음을 모두 시도하십시오.


caelyx, 나는 당신이 요구 한 정보를 원래 질문의 끝에 추가했습니다.
Roman

caelyx는 Bonjour가 IP 주소를 할당하지 않는다고 썼다 : "DHCP (일반적으로)는 IP 주소를 할당하는 데 사용됨". 그러나 Bonjour는 ZeroConf 프로토콜을 구현하며, Wikipedia에 따르면 ZeroConf 프로토콜의 핵심 기술 중 하나는 "네트워크 장치에 대한 숫자 네트워크 주소 할당 (링크 로컬 주소 자동 구성)"입니다.
Roman

DHCP / BootP 서버가없는 IPv4 네트워크에서 호스트는 자신에게 168. * 주소를 할당합니다. Bonjour는 해당 주소와 올바르게 작동합니다. 또는 IPv6 링크-로컬 주소를 참조하고 있습니다.
jdizzle

3

Bonjour는 IP 주소를 할당하지 않습니다. 이는 검색 프로토콜입니다. 작동하려면 여전히 DHCP / Static / Link-Local (APIPA) IP 주소가 필요합니다.

mDNS (멀티 캐스트 DNS)를 사용하여 자체와 동일한 브로드 캐스트 도메인에있는 호스트를 발견하고 본질적으로 자체 DNS 서버가됩니다.

로우 다운 에 대해서는 Bonjour & Zeroconf 를 참조하십시오 .

응용 프로그램이 가정 / 관리되지 않는 네트워크를위한 것이 아니라면 즉, 로컬 DNS 서버가 없으면 필요하지 않습니다.


ZeroConf는 IP 주소를 할당하지 않습니까?
Gobliins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.