SSH 용 Raspberry Pi의 IP 주소를 얻는 방법


11

SSH를 통해 Pi에 액세스하기 위해 Mac OSx를 사용하고 있습니다. 액세스하려면 Pi의 IP 주소가 필요하다는 것을 알고 있습니다. 그래서 나는 항상 로컬 IP를 제공하는 데 성공한 몇 가지 Python 명령을 사용하기로 결정했습니다.

import socket
host_name = socket.gethostname()
host_ip = socket.gethostbyname(host_name)
print host_ip

이상하게도 로컬 호스트 IP (127.0.1.1) 만 얻었습니다.

PI에 적합한 로컬 / 전역을 얻는 방법을 알려줄 수 있습니까?


1
인터넷 검색을 시도한 적이 있습니까?
Alexander-Reinstate Monica

lsleases보시고 , [IP 주소를 모르는 상태에서 Raspberry PI로 SSH] [1]에 대한 나의 답변을보십시오. [1] : raspberrypi.stackexchange.com/questions/12440/…
sebastian

Pi가 자체 주소를 얻도록 시도하고 있습니까? 이것이 어떻게 도움이 ssh되나요? 반드시 IP 주소가 필요합니다 ssh.
ctrl-alt-delor

답변:


12

Python이 필수 인 경우이 기사를 확인할 수 있습니다. http://code.activestate.com/recipes/439094-get-the-ip-address-related-with-a-network-inter/

그들은 컴퓨터가 네트워크 인터페이스만큼 많은 IP 주소를 가지고 있다고 지적합니다.

다음은 네트워크 어댑터의 IP 주소를 가져 오는 코드입니다. 코드를 테스트했으며 작동합니다.

import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

print get_ip_address('lo')
print get_ip_address('eth0')

RPi가 WiFi를 통해 연결된 경우 어댑터 이름은 wlan0

그렇지 않으면 다음 ip명령으로 얻을 수 있습니다 .

ip addr show eth0 | grep inet

다음과 같은 것을 얻어야합니다.

inet 192.168.0.140/24 brd ....

그것이 당신의 IP 주소입니다.

물론 RPi를 부팅하고 IP 주소를 모르기 때문에 RPi를 연결할 수 없으면이 중 어느 것도 작동하지 않습니다! 그렇다면 DHCP 서버가 방금 RPi에 어떤 IP 주소를 주 었는지 말할 수 있습니다 (또는 모두 시도하십시오 :))

즉, 이름으로 RPi를 참조하면 이점이 있으며 Mac을 사용하기 때문에 아마도 가장 좋은 해결책은 avahi-daemon을 설치하는 것입니다.

sudo apt-get install avahi-daemon

Bonjour와 같은 Apple Zeroconf 사양을 구현합니다. 그런 다음 이름으로 RPi에 ssh 할 수 있습니다.

ssh pi@raspberry.local

나는 두 개의 라즈베리 ( ygdrasilldvalinn )에 대해 다른 접근 방식을 사용했습니다 . 고정 IP (192.168.0.140 및 192.168.0.142)를 선택 했으므로 다른 컴퓨터 중 일부에서 etc / hosts 파일을 사용할 수도 있습니다.

내부 DNS를 설정하거나 Wins를 사용할 수 있었지만 현재 솔루션이 적합합니다.


안녕하세요 Remo, 이에 대해 자세히 설명해 주셔서 감사합니다. rasp pi 3에서 실행되는 python 3.5에서 코드를 작성하려고 시도했지만 작동하지 않아 런타임 오류가 발생합니다. "struct.error : 's'에 대한 인수는 bytes 객체 여야합니다"
Amit Rai Sharma

ssh pi@raspberrypi.localRPi의 기본 호스트 이름 은이어야한다고 생각합니다 raspberrypi. 데비안 세계에서 아바 히 데몬이 보편적으로 설치되지 않는 이유는 저를 넘어선 것입니다. Ad-hoc 네트워크는 즉시 사용할 수있는 꿈입니다.
Heath Raftery

필자의 이전 의견과 달리, 가장 최근의 Raspbian (Apr19)에서 현재 (5 월 19 일), raspberrypi.local 해상도와 169.254.xx 자동 할당이 기본적으로 구성없이 작동합니다!
Heath Raftery

2

이 코드 :

import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

print get_ip_address('lo')
print get_ip_address('eth0')

python 2.7에서만 작동하고 python 3에서는 작동하지 않습니다. 's '에 대한 인수가 바이트 객체 여야한다는 오류가 발생합니다 ...


답변이 질문에 어떤 도움이됩니까? 아래에서 작동하는 버전이 python3있습니까?
Ingo

0

소켓은 OS 설정 방법에 따라 로컬 호스트를 반환 할 수 있습니다. 그래서 휴대용이 아닙니다.

파이썬을 통해 IP를 얻는 방법에 대한이 답변은 도움 이됩니다 ./etc/hosts의 문제를 설명하고 적절한 해결책을 제공합니다. 완벽하지는 않지만 (ipv6) 여러 개의 바인딩 된 IP가있는 경우 라우팅 가능한 버전을 찾지 못할 수도 있지만 필요에 따라 좋은 oneliner입니다.

커맨드 라인에서 ifconfig친구입니다. 일반적으로 모든 바운드 인터페이스 등이 나열됩니다.

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