วิธีรับที่อยู่ IP ของ Raspberry Pi สำหรับ SSH


11

ฉันใช้ Mac OSx เพื่อเข้าถึง Pi ของฉันผ่าน SSH ในการเข้าถึงฉันรู้ว่าฉันต้องการที่อยู่ IP ของ Pi ดังนั้นฉันตัดสินใจใช้คำสั่ง Python สองสามคำซึ่งประสบความสำเร็จในการมอบ IP ท้องถิ่นให้ฉัน

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

ผิดปกติพอฉันได้รับ IP โฮสต์ท้องถิ่น (127.0.1.1) เท่านั้น

มีคนช่วยบอกวิธีการได้รับท้องถิ่น / ทั่วโลกที่เหมาะสม (แล้วแต่ว่าจะดีกว่านี้ต้องใช้ LAN ตอนนี้เท่านั้น) IP สำหรับ PI หรือไม่


1
คุณเคยลองทำ googling ไหม?
Alexander - Reinstate Monica

ลองดูคำตอบlsleasesดูคำตอบของฉันสำหรับ [SSH สู่ Raspberry PI โดยไม่ทราบที่อยู่ IP] [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-associated-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! ถ้า 'เป็นกรณีนี้เซิร์ฟเวอร์ DHCP ของคุณจะสามารถบอกคุณได้ว่า IP address ใดที่เขาเพิ่งมอบให้กับ RPi (หรือคุณลองทั้งหมด :)

ที่กล่าวว่าคุณอาจได้รับประโยชน์จากการอ้างอิง RPi ของคุณตามชื่อและเนื่องจากคุณใช้ Mac อาจเป็นทางออกที่ดีที่สุดในการติดตั้ง avahi-daemon:

sudo apt-get install avahi-daemon

ซึ่งใช้ข้อมูลจำเพาะ Apple Zeroconf (เช่น Bonjour) จากนั้นคุณสามารถ ssh ไปยัง RPi ของคุณโดยใช้ชื่อ:

ssh pi@raspberry.local

ฉันใช้วิธีที่แตกต่างกันสำหรับ Raspberrys สองตัวของฉัน (ชื่อygdrasillและdvalinn ): ฉันเลือกใช้ IP แบบคงที่ (192.168.0.140 และ 192.168.0.142) ดังนั้นฉันจึงสามารถใช้ไฟล์ etc / hosts ในเครื่องอื่นของฉันได้

ฉันสามารถตั้งค่า DNS ภายในหรือพึ่งพา Wins ได้ แต่โซลูชันปัจจุบันใช้ได้สำหรับฉัน


สวัสดี Remo ขอบคุณที่อธิบายในรายละเอียด ฉันลองโค้ดบน python 3.5 กับ rasp pi 3 แล้วมันไม่ทำงานและส่งผลให้เกิดข้อผิดพลาดขณะทำงาน "struct.error: อาร์กิวเมนต์สำหรับ 's' ต้องเป็นวัตถุไบต์"
Amit Rai Sharma

ผมเชื่อว่านี่ควรจะssh pi@raspberrypi.localได้รับชื่อโฮสต์เริ่มต้นสำหรับ RPI raspberrypiเป็น ทำไม avahi-daemon ไม่ได้รับการติดตั้งอย่างแพร่หลายในโลก Debian นั้นเกินกว่าฉัน เครือข่าย Ad-hoc เป็นความฝันเมื่อทำงานนอกกรอบ
Heath Raftery

ตรงกันข้ามกับความคิดเห็นก่อนหน้าของฉันใน Raspbian ล่าสุด (Apr19) ณ วันนี้ (May19) ทั้งความละเอียด 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

ซ็อกเก็ตอาจส่งคืน localhost ขึ้นอยู่กับวิธีการตั้งค่าระบบปฏิบัติการ ดังนั้นจึงไม่ใช่พกพา

stackoverflow คำตอบเกี่ยวกับการรับ IP ผ่าน pythonมีประโยชน์ - มันอธิบายปัญหากับ / etc / hosts และให้วิธีแก้ปัญหาที่เหมาะสม มันไม่สมบูรณ์แบบ (ipv6) และถ้าคุณมี IP ที่ถูกผูกไว้หลายอันอาจไม่พบเวอร์ชันที่กำหนดเส้นทางได้ แต่สำหรับความต้องการของคุณมันเป็นตัวเชื่อมต่อที่ดี

จาก commandline ifconfigเป็นเพื่อนของคุณ โดยทั่วไปจะแสดงรายการอินเทอร์เฟซที่ถูกผูกไว้ทั้งหมดของคุณและเช่นนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.