클라이언트 컴퓨터의 스크립트가 동일한 네트워크에서 서버 IP를 자동으로 찾도록 하는 방법을 찾고 있습니다.
우분투 14.04.1을 실행하는 여러 미디어 확장기 클라이언트와 단일 LAN에서 동일한 서버를 실행하는 서버가 있습니다. 클라이언트가 시작 시 네트워크에서 서버를 검색하기를 원합니다. 고정 IP 설정은 서버나 DHCP에서 사용할 수 있는 솔루션이 아닙니다.
호스트 이름으로 검색하는 것이 유용할 수 있지만, 두 장치의 호스트 이름이 동일하거나(가능성은 낮지만 가능) 호스트 이름이 변경되는 경우 클라이언트가 그런 식으로 브로드캐스팅하고 찾을 수 있도록 서버에 뭔가를 갖고 싶습니다. 그리고 LAN은 항상 동일한 이더넷이 아닐 수도 있습니다. (예를 들어 192.168.1.,10.0.0., 등)
클라이언트는 결국 서버에서 실행 중인 mysql 서버를 찾게 되지만 실제로는 스크립트가 서버의 데이터베이스를 사용하도록 소프트웨어를 구성할 수 있도록 IP만 필요합니다.
도움을 주셔서 미리 감사드립니다.
편집: 타사 프로그램은 괜찮습니다. 클라이언트는 언제든지 모든 서브넷의 모든 서버에 연결할 수 있습니다. 서버를 찾을 무언가가 있을 때, 서버와의 연결이 끊어진 후 검색을 다시 시작하기 위해 일종의 Keepalive를 사용할 수 있습니다. MAC 또는 기타 하드웨어 식별자 목록을 유지하는 것은 선택 사항이 아닙니다.
답변1
귀하의 요청에 따르면 그것이 바로 Multicast DNS (i.e. Bonjour)
정의의 목적이라고 생각합니다. Ubuntu 시스템을 사용하고 있다면 이미넘쳐이미 설치된 서버 avahi-daemon
및 클라이언트avahi-discover
기본적으로 다음과 같이 설정할 수 있습니다.
서버에 (기본 호스트 이름 대신) 멋진 이름을 지정하려면 Avahi 데몬에서 해당 이름을 올바르게 구성하기만 하면 됩니다. 이 구성은
/etc/avahi/avahi-daemon.conf
데스크탑을 통해 수행하거나 구성 파일을 수정하고 다음을 정의하는지 확인하여 수행할 수 있습니다.[server] host-name=database domain-name=local
- 클라이언트는 해당 이름의 IP 주소를 확인하여
database.local
IP 주소를 얻습니다. 예를 들어ping database.local
Avahi 도구를 실행하거나 사용하십시오.avahi-resolve -4 -n database.local
이는 로컬 DNS 도메인이 멀티캐스트 도메인으로 정의되어 있기 때문에 가능합니다. 클라이언트는 연결된 모든 시스템에 도달할 멀티캐스트 쿼리를 LAN으로 보냅니다. 서버의 Avahi 데몬은 쿼리에 응답하고 IP 주소를 제공합니다.
에 대한 자세한 정보를 확인하실 수 있습니다.여기에서 ZeroConf를 설정하는 방법.
수정하고 싶다면 mDNS
동시에 설치할 수도 있습니다.고객,아바히 도구그리고MDNS 스캔. 첫 번째는 서비스를 광고하는 데 사용될 수 있고, 다른 하나는 네트워크에서 해당 서비스를 찾는 데 사용될 수 있습니다. 예를 들어:
MySQL 데이터베이스와 연관된 새 이름을 등록하기 위해 서버에서 서비스를 실행하려면 다음을 수행하십시오.
$ mzclient -p "_sql._tcp 3306 database"
*** Registering name = 'database', type = '_sql._tcp', domain = 'local.'
*** Registered name = 'database'
(...)
Avahi 일회성 조회 서비스를 사용해 보려면:
$ avahi-browse -t _sql._tcp
+ eth0 IPv4 database _sql._tcp local
또는 지속적으로 네트워크를 검색하여 사용 가능한 mDN 서비스를 찾아보세요.
$ mdns-scan
+ server [xx:xx:xx:xx:xx:xx]._workstation._tcp.local
+ database._sql._tcp.local
Browsing ... \
[ interrupt with Ctrl+Z]
이 구성에서는 필요하지 않은 중앙 DNS 서버를 사용하지 않습니다. 모든 쿼리는 멀티캐스트 트래픽을 사용하여 로컬 LAN에서 수행됩니다.
답변2
서버의 MAC은 적어도 자주는 변하지 않을 것으로 예상되므로 이를 사용하여 서버의 IP를 식별하겠습니다. 비슷한 방법을 사용하여 arpwatch
서버 IP/MAC 쌍이 식별될 때까지 네트워크를 모니터링하여 서버 IP를 얻습니다.
답변3
nmap을 사용한 네트워크 스캐닝이 작동해야 합니다. 더 쉬운 첫 번째 단계는 arp -a
브로드캐스트 네트워크의 모든 Mac과 IP를 제공하는 명령을 실행하는 것입니다 (ICMP 요청이 차단되지 않은 경우).
다음으로 현재 있는 브로드캐스트 주소에 대해 핑을 시도해 보세요(ICMP 요청이 차단되지 않아야 함). 예를 들어 서버가 192.168.1.10이고 넷마스크가 255.255.255.0인 경우 ping -b 192.168.1.255
(Windows의 경우 ping -a 192.168.1.255
) 네트워크의 다른 모든 장치(서버, 라우터, 씬 클라이언트 등)에서 응답을 호출해야 합니다.
물론 이는 서브넷 내의 장치만 제공합니다. "네트워크"에 더 많은 서브넷이 있는 경우 ping
이러한 다른 네트워크에 브로드캐스트 주소를 실행하고 각 네트워크에서 유사한 장치 목록을 생성할 수도 있습니다.
답변4
편집 2(대화를 기반으로 함):
이것이 귀하에게 더 효과적인지 확인하십시오(추가 정보 포함).
nmap -p 22 --open -sV 192.168.1.0/24
awk
이전과 마찬가지로 IP만 원하는 경우 다음을 추가하세요.
nmap -p 22 --open -sV 192.168.1.0/24 |
awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
어디:
nmap : the executable name
-p 22 : specifies the port to test
--open : suppress output for clients that are not listening
-sV : display the version string reported by the scanned server
편집하다:
로컬 컴퓨터가 통신할 수 있는 네트워크의 모든 IP 주소를 얻으려는 경우 다음을 시도하십시오 nmap
.
nmap -sP -PA21,22,25,3389 192.168.1.1-254 |
awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
서버가 -PA21,22,25,3389
(브로드캐스트 네트워크에서 192.168.1.1-254
) 작동 중인지 테스트하기 위해 사용자 정의 포트 범위를 시도했지만, 연결하려는 특정 포트가 있는 경우 이를 변경할 수 있습니다. awk
IP 주소 이상을 원하는 경우 삭제할 수 있으며 호스트 이름 등이 인쇄됩니다.
에서 오는 서버의 IP 주소만 원하는 경우 다음을 ifconfig
실행할 수 있습니다.
ifconfig | awk '/inet addr/{print substr($2,6)}'
[OR]
/sbin/ifconfig | awk '/inet addr/{print substr($2,6)}'
그러면 다음 결과가 인쇄됩니다.
10.0.0.XX1
10.0.0.XX2
10.0.0.XX3
127.0.0.1
localhost - 127.0.0.1
결과에서 제거하려면 다음을 사용하세요.
ifconfig | awk '/inet addr/{print substr($2,6)}' | awk '!/127.0.0.1/'
Result:
192.168.1.XXX
이 줄을 그대로 스크립트에 넣고 로컬 컴퓨터에서 실행하여 IP 주소를 얻거나, 쉘 스크립트에 넣어 다음과 같이 원격 주소를 얻을 수 있습니다 ssh
.
#!/bin/sh
#getremoteips.sh
#chmod 700 getremoteips.sh ##Root should only be running this
ssh $1 "/sbin/ifconfig |
awk '/inet addr/{print substr(\$2,6)}' |
awk '!/127.0.0.1/'"
스크립트를 실행합니다../getremoteips.sh <enter hostname or ip>