लिनक्स में IPv6 IP पता कैसे प्राप्त करें


35

मेरे पास एक लिनक्स सर्वर है और मैं एक एकल कमांड लाइन के माध्यम से मुख्य आईपीवी 6 पता ढूंढना चाहता हूं।

मेरी आज्ञा अब तक:

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

जो दीखता है:

2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4

लेकिन मैं केवल एक घटना चाहता हूं , ताकि आउटपुट पढ़ें:

2001:410:0:39:221:28ff:fe46:eef4

एक शेल स्क्रिप्ट लिखें और उन कमांड को वहां रखें: वॉइला, आपने अब एक "सिंगल" कमांड बनाया है।
अकीरा

4
IPv6 के साथ काम करते समय इसे वास्तव में एक पते तक सीमित करने की अनुशंसा नहीं की जाती है। कई वैश्विक पते, कई लिंक-स्थानीय पते, कई साइट-स्थानीय पते हो सकते हैं ...
विशालता

जवाबों:


31
ip -6 addr

आपके IPv6 पते दिखाएगा।


% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... अभी भी अपूरणीय है
अकीरा

1
यह बताए गए प्रश्न को हल नहीं करता है। ओपी एक IPv6 (जो शायद प्राथमिक सार्वजनिक एक का मतलब है) को पुनः प्राप्त करने के लिए एक एकल कमांड लाइन चाहता है। तो या तो ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'या ip -6 addr show dev eth0 | awk '/inet6/{print $2}'एक आधार के रूप में इस्तेमाल किया जा सकता है और ओपी अपने विशिष्ट उपयोग के लिए विस्तार / उन्हें संपादित कर सकते हैं।
rwenz3l

6

/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

/sbin/ip -6 addr | grep inet6कुछ इस तरह दिखता है आउटपुट :

inet6 ::1/128 scope host 
inet6 2001:123:456:55f::1/64 scope global 
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link 

awk -F '[ \t]+|/' '{print $3}'एक या एक से अधिक सफेद रिक्त स्थान या आगे स्लैश होने के लिए सीमांकित करने वाली प्रत्येक पंक्ति को विभाजित करता है। हमें जो हिस्सा चाहिए वह है $ 3।

grep -v ^::1 | grep -v ^fe80::1या के साथ शुरू होने वाली किसी भी लाइन को बाहर करने के लिए fe80


जाग में grep की बहुत अधिक पाइपिंग है, यह एक ही awk `awk -F '[\ t] + | /' '$ 3 ==" :: 1 "{अगला;} $ 3 ~ ^ fe80 में समतल हो सकता है। ::/ { आगामी ; } / inet6 / {प्रिंट $ 3} '`
आर्कमियर

3
$ /sbin/ifconfig | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
      inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
      inet6 addr: ::1/128 Scope:Host

यदि आप एक IPv6 पते का यादृच्छिक चयन चाहते हैं

$ /sbin/ifconfig | grep inet6 | head -n 1
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

यदि आप पहले ईथरनेट एडाप्टर के लिए सबसे सामान्य नाम का IPv6 पता चाहते हैं

$ /sbin/ifconfig eth0 | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

अगर आप सिर्फ एड्रेस चाहते हैं

$ /sbin/ifconfig eth0 |  awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64

2

लिनक्स पर अपना आईपी पता देखने के लिए निम्नलिखित कमांड का उपयोग करें:

ifconfig

आम तौर पर, आईपीवी 6 पता जैसा दिखता है 2001:5c0:9168::/48। यदि आप अपने आईपी में किसी भी संघर्ष का सामना कर रहे हैं, तो आईपी पते को फिर से सेट करने के लिए नीचे दिए गए चरणों का पालन करें:

  1. IPv6 IP असाइन करने के लिए, सुनिश्चित करें कि आपके पास iproute2 टूल इंस्टॉल है।
  2. उनका उपयोग करते हुए, आइए अपने आईपी को असाइन करना शुरू करें।
  3. सुनिश्चित करें कि ipv6 मॉड्यूल स्थापित है या नहीं।

फिर, नया IP जोड़ने के लिए निम्न कमांड का उपयोग करें:

ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0

बाद में, डिफ़ॉल्ट आईपी के माध्यम से जोड़ें

ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0

अपनी स्थापना पूरी करने के बाद, अपाचे, एसएसएच आदि जैसी अपनी आईपीवी 6 सक्षम सेवाओं को फिर से कॉन्फ़िगर / पुनरारंभ करें।


ifconfigलिनक्स पर अप्रचलित है और अब इसका उपयोग नहीं किया जाना चाहिए। आधुनिक लिनक्स डिस्ट्रोस इसे डिफ़ॉल्ट रूप से अब भी स्थापित नहीं करता है (जब तक कि कुछ प्राचीन पैकेज को इसकी आवश्यकता नहीं है)।
माइकल हैम्पटन

1

कुछ छोटे ट्विक्स के साथ, आपके मूल प्रयास ने काम किया होगा:

ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'

वहाँ बड़ा बदलाव -oझंडे के अतिरिक्त के कारण प्रविष्टियों को मुद्रित करने का कारण बनता है, एक प्रति पंक्ति, जिससे उनके ऊपर सेड चलाना आसान हो जाता है।


0

सबसे पहले, आपको यह याद रखना होगा कि IPv6 के साथ किसी भी मशीन में कई IPv6 पते हो सकते हैं, और वे अलग-अलग नेटवर्क पर हो सकते हैं, और उनमें से किसी का भी उपयोग किया जा सकता है, इस पर निर्भर करता है कि आप कहाँ पहुँचना चाहते हैं।

इसलिए, इससे पहले कि आप इस सवाल का जवाब दे सकें कि आपके स्रोत का आईपी पता आपको क्या तय करना है कि आप ट्रैफ़िक कहाँ भेज रहे हैं। तब आप लिनक्स से यह बताने के लिए कह सकते हैं कि उस गंतव्य पर ट्रैफ़िक भेजते समय IPv6 का कौन सा स्रोत होगा।

यदि आप इसे "इंटरनेट" पर भेज रहे हैं, तो बस वैश्विक IPv6 पते को यादृच्छिक रूप से चुनें, जैसे Google का सार्वजनिक DNS पता।

ip r get to 2001:4860:4860::8888 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000

यह लिनक्स को उस गंतव्य के लिए मार्ग पूछता है। पर्ल परिणाम खोज रहा है srcऔर फिर अगले क्षेत्र को प्रिंट करता है।

एक अलग गंतव्य प्रदान करके, आपको एक अलग स्रोत पता प्राप्त हो सकता है:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1

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