-
먼저 Bonjour는 정확히 무엇을합니까 (내 추측은 다음과 같습니다)?
여기서 Bonjour를 사용하면 IP 네트워크에서 컴퓨터, 장치 및 서비스를 자동으로 검색 할 수 있습니다. 그러나 “IP 네트워크의 장치 검색”뿐만 아니라 Bonjour가 실행중인 장치에 IP 주소를 할당하여 IP 네트워크를 생성한다고 생각했습니다. 내가 맞아? -
그리고 나는 여전히 본질을 그리워합니다. 다음과 같은 방식으로 작동합니까? 먼저 잠재적으로 서로 통신 할 수 있도록 장치 (예 : 랩톱)를 물리적으로 연결합니다. 그런 다음 일부 랩톱에서 Bonjour를 실행 한 다음이 랩톱에서 자동으로 IP 주소를 자동으로 할당합니다. 따라서 Bonjour가 실행되는 랩톱은 IP 네트워크를 구축합니다. 이런 식으로 작동합니까?
-
또는 Bonjour를 실행하는 컴퓨터는 서비스로 간주되지 않으며 Bonjour가이 컴퓨터에서 실행 중이기 때문에 자체 브로드 캐스트되지 않습니다. 컴퓨터에서 실행되는 응용 프로그램은 Bonjour를 사용하여 브로드 캐스트해야합니다. 따라서 (컴퓨터가 아닌) 스스로 브로드 캐스트하는 응용 프로그램이며 자동으로 수행되지 않습니다 (응용 프로그램은 명시 적으로 브로드 캐스트해야 함). 맞아?
-
내 응용 프로그램이 정확히 어떻게 브로드 캐스트 할 수 있습니까? 명령 줄을 사용하여 서비스를 등록 할 수 있습니까 (Bonjour를 사용하는 모든 응용 프로그램이 새로운 서비스가 나타났음을 알 수 있습니까)?
-
또한 Bonjour가 만든 IP 네트워크를 사용하는 응용 프로그램을 갖고 싶습니다. 이를 위해 내 응용 프로그램은 네트워크에 어떤 장치 / 서비스가 있는지 알아야합니다. 자세한 내용은 응용 프로그램에 서비스 목록이 필요합니다. 목록의 각 서비스에는 이름, 서비스가 실행중인 IP 주소 및 응용 프로그램에서 사용하는 포트가 있어야합니다. Bonjour가이 정보를 어떤 방식으로 제공 할 수 있습니까? 이 경우 정확히 작동합니다. 내 프로그램이 Bonjour에서이 정보를 얻는 방법은 무엇입니까? 내 프로그램이 Bonjour가 작성하고 위에서 언급 한 정보가 포함 된 파일을 읽을 수 있습니까? 이 정보를 검색하기 위해 명령 행에서 일부 명령을 사용할 수 있습니까?
-
파일, 환경 변수 또는 명령 줄의 명령에서 서비스 정보에 액세스하는 데 특별한 관심이 있습니다. 이 옵션은 가장 간단한 것 같습니다! 이 경우 특정 프로그래밍 언어에서 Bonjour와 통신하기 위해 추가 라이브러리를 사용할 필요가 없습니다.
PS Pleas가 내 질문에 분명하지 않은 경우 질문합니다. 더 명확한 방법으로 질문을 작성하려고 노력할 것입니다.
PPS Windows 7을 사용합니다 .
ADDED : PHP로 애플리케이션을 작성할 계획입니다. 모든 컴퓨터는 Apache 웹 서버를 실행해야합니다. 그리고 Bonjour를 사용하여 컴퓨터가 서로를 발견하도록 돕고 싶습니다 (컴퓨터가 로컬 네트워크에서 작동 중임).
답변
-
예. Apple의 Rendezvous / Bonjour의 주요 관리자 인 Stuart Cheshire는 IETF ZeroConf 워킹 그룹을 공동으로 이끌고 Zero Configuration Networking에 관한 O’Reilly 책을 썼다. 다리가있는 발판”:
- IPv4 (및 IPv6) 링크 로컬 주소 지정
- 멀티 캐스트 이름 확인 (mDNS)
- DNS-SD (DNS 서비스 검색)
IETF ZeroConf 워킹 그룹과 Apple은 모두 링크 로컬 주소 지정, 특히 IPv4 링크 로컬 주소 지정 (
169.254.0.0/16
주소)을 ZeroConf / Bonjour의 일부로 간주합니다. 링크 로컬 주소 지정 은 다른 두 “대변”보다 몇 년 전에 제공 되었음에도 불구하고 말입니다.Windows는 Apple의 Windows 용 Bonjour 소프트웨어가 설치되어 있지 않아도 이미 자동 링크 로컬 주소 지정을 지원하므로 많은 Windows 사용자는 IPv4 링크 로컬 주소 지정이 Bonjour / ZeroConf의 일부라고 생각하지 않습니다.
-
예. Mac 및 Windows 시스템은 기본적으로 IPv4 링크 로컬 주소 지정이 DHCP 용으로 구성되었지만 사용 가능한 DHCP 서버가없는 경우 주소 지정을 수행합니다. Avahi (또는 다른 ZeroConf 구현)가 설치된 Linux 및 BSD 시스템도이 작업을 수행합니다.
-
컴퓨터에서 Bonjour를 실행중인 경우 호스트 이름은 mDNS를 통해 LAN에 게시됩니다. 컴퓨터 이름이 “Alice”인 경우
Alice.local
mDNS를 통해 사용됩니다. 동일한 LAN (특히 동일한 링크 로컬 멀티 캐스트 도메인)의 다른 컴퓨터 ( “Bob”이라고 함)에서 간단히 입력 할 수 있어야ping Alice.local
하며 Bob은Alice.local
Alice의 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 데몬 (
mDNSResponder
Apple 구현에서 호출 )에 광고하려는 서비스가 있음을 알려야합니다 . macOS에는 기본적으로 Bonjour를 인식하지 않는 레거시 서비스에 대한 서비스 광고를 자동으로 처리하는 메커니즘이 있습니다. 예를 들어, macOSsshd
는 Bonjour를 직접 지원하지 않는 OpenSSH이지만 macOS는ssh
Bonjour를 통해 서비스 광고를 처리 하므로ssh username@Alice.local
LAN의 다른 시스템 에서만 가능 합니다. -
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 프로젝트 소스에서 직접 컴파일하려고합니다. -
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는 정확히 무엇을합니까 (내 추측은 다음과 같습니다)? 여기서 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가 내 질문에 분명하지 않은 경우 질문합니다. 더 명확한 방법으로 질문을 작성하려고 노력할 것입니다.
작성중인 프로그램과 작성중인 언어에 대한 추가 정보가 있으면 도움이 더 쉬울 것입니다.
더 많은 정보를 얻으려면 다음을 모두 시도하십시오.
- Apple FAQ : http://developer.apple.com/networking/bonjour/faq.html
- Wikipedia 페이지 : http://en.wikipedia.org/wiki/Bonjour_ (소프트웨어)