Raspberry Pi'nin SSH için IP adresini alma


11

Pi'ye SSH üzerinden erişmek için Mac OSx kullanıyorum. Erişmek için Pi'nin IP adresine ihtiyacım olduğunu biliyorum. Bu yüzden, bana her zaman yerel IP'yi vermeyi başaran birkaç Python komutu kullanmaya karar verdim.

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

Garip bir şekilde, sadece yerel ana bilgisayar IP'sini aldım (127.0.1.1).

Birisi bana PI için uygun yerel / küresel (hangisi daha iyi, bunun sadece LAN üzerinden çalışması gerekiyor) IP almak için söyleyebilir misiniz?


1
Bunu googling etmeyi denedin mi?
İskender - Monica'yı iade et

Lsleases bir göz atın , [IP adresi bilmeden Ahududu PI SSH içine] SSH cevap [1] bakın. [1]: raspberrypi.stackexchange.com/questions/12440/…
sebastian

Pi'yi kendi adresini bulmaya mı çalışıyorsun? Bu size nasıl yardımcı ssholuyor? Elbette önce IP adresine ihtiyacınız var ssh.
ctrl-alt-delor

Yanıtlar:


12

Python bir zorunluluksa, bu makaleyi kontrol edebilirsiniz: http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/

Haklı olarak, bir bilgisayarın ağ arabirimleri kadar IP adresine sahip olduğunu belirtiyorlar.

İşte bir ağ bağdaştırıcısının IP adresini almak için kodlarını, kodu test ettik ve çalışıyor:

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'niz WiFi üzerinden bağlıysa, adaptör adı wlan0

Aksi takdirde şu ipkomutla alabilirsiniz:

ip addr show eth0 | grep inet

Gibi bir şey almalısınız:

inet 192.168.0.140/24 brd ....

Bu sizin IP adresiniz.

Tabii ki RPi'nizi önyüklerseniz ve IP adresini bilmediğiniz için bağlanamazsanız bunların hiçbiri işe yaramaz! Eğer 'DHCP sunucunuz RPi'ye hangi IP adresini verdiğini söyleyecektir (ya da hepsini deneyin :))

Bununla birlikte, RPi'yi adıyla göndermekten fayda sağlayabilirsiniz ve Mac kullandığınızdan, muhtemelen en iyi çözüm avahi-daemon'u yüklemek olacaktır:

sudo apt-get install avahi-daemon

Apple Zeroconf belirtimini uygular (Bonjour gibi). Daha sonra RPi'nize adıyla ssh yapabilirsiniz:

ssh pi@raspberry.local

İki Raspberrys ( ygdrasill ve dvalinn adlı) için farklı bir yaklaşım kullandım : Sabit bir IP (192.168.0.140 ve 192.168.0.142) seçtim, böylece diğer makinelerimin bazılarında etc / hosts dosyasını da kullanabilirim.

Dahili bir DNS kurabilir veya Wins'e güvenebilirdim, ancak mevcut çözüm benim için çalışıyor.


Merhaba Remo, Bunu ayrıntılı olarak açıkladığınız için teşekkür ederiz. Ben rasp pi 3 üzerinde çalışan python 3.5 kod çalıştı. Bu çalışmıyor ve bir çalışma zamanı hatası ile sonuçlanır. "struct.error: 's' argümanı bir bayt nesnesi olmalıdır"
Amit Rai Sharma

Bunun ssh pi@raspberrypi.localbir RPi için varsayılan ana bilgisayar adı verilmesi gerektiğine inanıyorum raspberrypi. Avahi-daemon'un Debian dünyasında evrensel olarak kurulmaması neden beni aşıyor. Geçici ağlar kutudan çıktığında bir rüyadır.
Heath Raftery

Önceki yorumumun aksine, şu anki (Mayıs19) en son Raspbian'da (19 Nisan), hem raspberrypi.local çözünürlük hem de 169.254.xx otomatik atama, kutudan çıkmadan yapılandırma olmadan çalışır!
Heath Raftery

2

Bu kod:

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')

sadece python 2.7 altında çalışır, python 3 ile çalışmaz, 's' argümanının bir bayt nesnesi olması gerektiği hatasını alırsınız ...


Cevap soruya ne yardımcı olur? Altında çalışan bir sürümünüz var python3mı?
Ingo

0

soketi, işletim sisteminin kurulumuna bağlı olarak localhost'u döndürebilir. Yani taşınabilir değil.

Python üzerinden IP alma ile ilgili bu yığın akışı yardımcı olur - / etc / hosts ile sorunu açıklar ve iyi bir geçici çözüm sağlar. Mükemmel değil (ipv6) ve birkaç bağlı IP'niz varsa yönlendirilebilir sürümü bulamayabilir, ancak ihtiyaçlarınız için iyi bir oneliner.

Komut satırından ifconfigarkadaşın. Genellikle tüm bağlı arabirimlerinizi ve benzerlerini listeler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.