SSH के लिए रास्पबेरी पाई का IP पता कैसे प्राप्त करें


11

मैं अपने OS को SSH के माध्यम से एक्सेस करने के लिए Mac OSx का उपयोग कर रहा हूं। इसे एक्सेस करने के लिए, मुझे पता है कि मुझे Pi के IP पते की आवश्यकता है। इसलिए, मैंने कुछ पायथन कमांड्स का उपयोग करने का फैसला किया जो मुझे हमेशा स्थानीय आईपी देने में सफल रहे हैं।

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

अजीब तरह से, मैंने केवल स्थानीय होस्ट आईपी (127.0.1.1) प्राप्त किया है।

क्या कोई कृपया मुझे बता सकता है कि उचित स्थानीय / वैश्विक कैसे प्राप्त करें (जो भी बेहतर हो, यह केवल पीआई के लिए लैन पर अब काम करने की आवश्यकता है)?


1
क्या आपने भी इसे देखने की कोशिश की है?
अलेक्जेंडर - मोनिका

Lsleases पर एक नजर है , [IP पता जानने के बिना [रास्पबेरी PI में SSH के लिए मेरा जवाब देखें] [1]। [१]: raspberrypi.stackexchange.com/questions/12440/…
सेबस्टियन

क्या आप पाई को अपना पता प्राप्त करने की कोशिश कर रहे हैं? यह आपकी मदद कैसे करता है ssh, इसे करने के लिए? निश्चित रूप से आपके सामने आईपी पते की आवश्यकता है ssh
सीटीएल-अल्ट-डेलोर

जवाबों:


12

यदि पायथन एक है, तो आप इस लेख को देख सकते हैं: http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/

वे ठीक से इंगित करते हैं कि कंप्यूटर में नेटवर्क इंटरफेस के रूप में कई आईपी पते हैं।

यहाँ एक नेटवर्क एडेप्टर का आईपी पता प्राप्त करने के लिए उनका कोड है, मैंने कोड का परीक्षण किया है और यह काम करता है:

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

यदि आपका आरपीआई वाईफाई के माध्यम से जुड़ा है तो एडेप्टर नाम होना चाहिए wlan0

अन्यथा आप इसे ipकमांड से प्राप्त कर सकते हैं :

ip addr show eth0 | grep inet

आपको कुछ मिलना चाहिए:

inet 192.168.0.140/24 brd ....

वह आपका IP पता है।

यदि आप सिर्फ अपने आरपीआई को बूट करते हैं तो निश्चित रूप से इसमें से कोई भी काम नहीं करेगा, क्योंकि आप आईपी पते को नहीं जानते हैं! यदि 'ऐसा मामला है तो आपका डीएचसीपी सर्वर निश्चित रूप से आपको बता सकेगा कि उसने किस आईपी पते को आरपीआई को दिया था (या आप बस उन सभी को आज़माएँ :))

उसने कहा, आप आरपीआई को नाम से संदर्भित करने का लाभ उठा सकते हैं और, चूंकि आप मैक का उपयोग कर रहे हैं, शायद सबसे अच्छा समाधान अवधी-डेमॉन स्थापित करना होगा:

sudo apt-get install avahi-daemon

जो Apple Zeroconf विनिर्देशन (जैसे बोनजॉर) को लागू करता है। फिर आप अपने आरपीआई को नाम से बता सकते हैं:

ssh pi@raspberry.local

मैंने अपने दो रास्पबेरी ( ygdrasill और dvalinn नाम ) के लिए एक अलग दृष्टिकोण का उपयोग किया : मैंने एक निश्चित आईपी (192.168.0.140 और 192.168.0.142) का विकल्प चुना है, इसलिए मैं अपनी कुछ अन्य मशीनों पर आदि / होस्ट फ़ाइल का भी उपयोग कर सकता हूं।

मैं एक आंतरिक डीएनएस सेट कर सकता था या जीत पर भरोसा कर सकता था, लेकिन वर्तमान समाधान मेरे लिए काम करता है।


हाय रेमो, इसे विस्तार से समझाने के लिए धन्यवाद। मैंने आपको python पर कोड की कोशिश की 3.5 rasp pi 3 पर चल रहा है। यह काम नहीं करता है और परिणामस्वरूप रनटाइम त्रुटि होती है। "struct.error: 's' के लिए तर्क एक बाइट्स ऑब्जेक्ट होना चाहिए"
अमित राय शर्मा

मेरा मानना ​​है कि इसे ssh pi@raspberrypi.localआरपीआई के लिए डिफ़ॉल्ट होस्टनाम दिया जाना चाहिए raspberrypi। एवहि-डेमन सार्वभौमिक रूप से डेबियन दुनिया में स्थापित क्यों नहीं है मेरे से परे है। तदर्थ नेटवर्क एक सपना है जब यह बॉक्स से बाहर काम करता है।
हीथ राफेरी

मेरी पिछली टिप्पणी के विपरीत, अब (मई 19) के रूप में सबसे अंतिम रास्पबियन (Apr19) में, दोनों रास्पबेरीपी.लोकल रिज़ॉल्यूशन और 169.254.xx ऑटो-असाइनमेंट कार्य बिना किसी कॉन्फ़िगरेशन बॉक्स से बाहर काम करते हैं!
हीथ राफ्टी

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

केवल अजगर 2.7 के तहत काम करता है, यह अजगर 3 के साथ काम नहीं करता है, आपको यह त्रुटि मिलेगी कि 's' के लिए तर्क एक बाइट ऑब्जेक्ट होना चाहिए ...


प्रश्न के लिए उत्तर क्या मदद करता है? क्या आपके पास एक संस्करण है जो काम करता है python3?
इंगो

0

सॉकेट लोकलहोस्ट को लौटा सकता है, यह इस बात पर निर्भर करता है कि ओएस कैसे सेट किया जाता है। तो यह पोर्टेबल नहीं है।

अजगर के माध्यम से आईपी प्राप्त करने के बारे में यह स्टैकओवरफ्लो उत्तर सहायक है - यह / etc / मेजबान के साथ समस्या को समझाता है और एक अच्छा समाधान देता है। यह सही नहीं है (ipv6), और यदि आपके पास कई बाध्य आईपी हैं, तो यह राउटेबल संस्करण नहीं मिल सकता है, लेकिन आपकी आवश्यकताओं के लिए यह एक अच्छा ऑनलाइनर है।

कमांडलाइन से, ifconfigआपका मित्र है। यह आमतौर पर आपके सभी बाध्य इंटरफेस और इस तरह की सूची देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.