سؤال الأمر لتحديد IP العام الخاص بي؟


إذا كنت تحقق مع جوجل، أستطيع أن أرى IP العام الخاص بي. هل هناك شيء ما على سطر الأوامر في Ubuntu والذي سيقدم لي نفس الإجابة؟


526
2018-01-16 11:50


الأصل


"وجود IP الديناميكي" ، "SSH باستخدام بعض الأنظمة الأخرى عبر الإنترنت" ، "الأمر الذي سيعرض عنوان IP العام الحالي". ترى مشكلة الدجاج / البيض هنا؟ كيف سيكون بإمكانك تشغيل الأوامر على خادم بعيد دون معرفة عنوانه؟ قد تكون أكثر اهتمامًا بالخدمات مثل no-ip.com / DynDNS.org. - gertvdijk
لا يمكن للمرء أن يراهن من دون معرفته العامة IP صديقي ... dynDNS يكلف الكثير و لا يعمل بجد IP ولكن الوضع لا يسمح بذلك ... على أي حال تم الإجابة على السؤال بالفعل .. شكرا لاقتراحكم - Z9iT
PS duckduckgo.com/؟q=ip (لا يوجد سطر الأوامر ، ولكن لا يوجد أخ كبير G لا) - Campa
ربما ينبغي أن يكون هذا سؤالًا منفصلًا ، لكنني أرغب في رؤية تنبيه عندما يتغير عنوان IP العام. الآن ، أنا فقط باستخدام الإجابات التالية في crontab مع notify-send. - PJ Brunet


الأجوبة:


إذا لم تكن خلف جهاز توجيه ، فيمكنك العثور عليه باستخدامه ifconfig.

إذا كنت خلف جهاز توجيه ، فلن يعرف جهاز الكمبيوتر الخاص بك عنوان IP العام حيث يقوم جهاز التوجيه بترجمة عنوان شبكة. يمكنك أن تسأل بعض المواقع التي يستخدمها عنوان IP العام الخاص بك curl أو wget واستخراج المعلومات التي تحتاجها منها:

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

أو أقصر

curl ipinfo.io/ip

750
2018-01-16 11:56



ty - مباشرة بعد نشري ، أدركت أنني لم أكن google لإجابة أولاً: يبدو أن هذا سيعمل curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  الاحتمالات الأخرى مذكورة هنا: go2linux.org/what-is-my-public-ip-address-with-linux - kfmfe04
بالتأكيد - يمكنك إضافته إلى إجابتك - kfmfe04
لتوضيح ذلك: كان هذا الاختراق ، وهو أمر بشع للغاية في ذلك ، لذا قمت بتحرير لجعله أكثر بساطة وشيء يمكن أن يتذكره الناس. - jrg♦
Exacly كما ذكر جيوفاني ف. يجب أن يقوم OP بتغيير التغيير المستلم. - loostro
الضفيرة- s ipinfo.io/ip - chao


للعثور على عنوان IP الخارجي ، يمكنك إما استخدام الخدمات الخارجية المستندة إلى الويب ، أو استخدام أساليب تستند إلى النظام. أسهل واحد هو استخدام الخدمة الخارجية ، أيضا ifconfig سوف تعمل الحلول القائمة في النظام الخاص بك فقط إذا كنت لا تقف وراءه NAT. تمت مناقشة الطريقتين أدناه بالتفصيل.

البحث عن عنوان IP خارجي باستخدام خدمات خارجية

أسهل طريقة هي استخدام خدمة خارجية عبر متصفح سطر الأوامر أو أداة التنزيل. منذ wget متاح افتراضيًا في Ubuntu ، يمكننا استخدام ذلك.
للعثور على عنوان IP الخاص بك ، استخدم

$ wget -qO- http://ipecho.net/plain ; echo

مجاملة:

يمكنك أيضا استخدام lynx(المتصفح) أو curl بدلا من wget مع وجود اختلافات طفيفة في الأمر السابق ، للعثور على عنوان IP الخارجي الخاص بك.

عن طريق curl للعثور على عنوان IP:

$ curl ipecho.net/plain

من أجل استخدام مخرجات منسقة بشكل أفضل:

$ curl ipecho.net/plain ; echo

أسرع (يمكن القول الأسرع) باستخدام طريقة dig مع OpenDNS كمحلل:

الإجابات الأخرى هنا تذهب عبر HTTP إلى خادم بعيد. بعض من   تحتاج إلى تحليل الناتج ، أو الاعتماد على رأس وكيل المستخدم   لجعل الخادم يستجيب بنص عادي. هم أيضا تغيير تماما   في كثير من الأحيان (النزول ، وتغيير اسمها ، ووضع الإعلانات ، قد تتغير   تنسيق الإخراج وما إلى ذلك).

  1. تم توحيد بروتوكول استجابة DNS (سيبقى التنسيق متوافقًا).
  2. تاريخياً ، تميل خدمات DNS (OpenDNS ، Google Public DNS ، ..) إلى البقاء لفترة أطول وأكثر استقرارًا وقابلية للتدرج وبصفة عامة   بعد أكثر من أي خدمة HTTP whatismyip.com جديدة ساخنة اليوم.
  3. (بالنسبة لأولئك المهوسون الذين يهتمون بالتحسين الصغري) ، يجب أن تكون هذه الطريقة أسرع بطبيعتها (سواء كان ذلك من خلال بضع ثوانٍ صغيرة).

استخدام الحفر مع OpenDNS كمحلل:

$ dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

تم النسخ من:  https://unix.stackexchange.com/a/81699/14497

العثور على IP الخارجي دون الاعتماد على الخدمات الخارجية

  • إذا كنت تعرف اسم واجهة الشبكة الخاص بك

اكتب ما يلي في الجهاز الخاص بك:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

في ما ورد أعلاه ، استبدل <interface_name> مع اسم واجهتك الفعلية ، على سبيل المثال: eth0، eth1، pp0، وما إلى ذلك ...

مثال للاستخدام:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • إذا كنت لا تعرف اسم واجهة الشبكة الخاصة بك

اكتب ما يلي في الطرفية الخاصة بك (وهذا ما يحصل على اسم وعنوان IP لكل واجهة شبكة في النظام الخاص بك):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

مثال للاستخدام:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B: النواتج إرشادية وليست حقيقية.

مجاملة:  http://www.if-not-true-then-false.com/2010/linux-get-ip-address/

تحديث 

  1. LANG=c تمت الإضافة إلى ifconfig الاستخدامات الأساسية ، بحيث تعطي دائمًا ناتج اللغة الإنجليزية ، بصرف النظر عن الإعدادات المحلية.

364
2018-06-01 12:10



@ Z9iT ، بالتأكيد ... يجب أن تعمل في أي توزيع لينكس شريطة أن يكون لديك wget مثبت. كما قيل إذا كان لديك curl أو lynx متوفرة بالفعل ، فيرجى استخدام ذلك بدلاً من ذلك. سوف تحتاج إلى إذن الجذر لتثبيت ذلك الاستخدام sudo apt-get install wget - saji89
لا تعمل الأوامر مع ifconfig إلا إذا لم تكن خلف NAT. - lukassteiner
مجرد استخدام -w خيار الضفيرة بدلا من صدى :) curl -w '\n' ident.me - drAlberT
هذا الاقتراح باستخدام حفر لطيفة جدا unix.stackexchange.com/questions/22615/... - binaryanomaly
saji ifconfig إذا عفا عليها الزمن ، يرجى استخدام iproute2 ؛ ^). سيكون الأمر ip -o -4 a s eth0 | awk '{sub(/\/.*/, "", $4);print $4}'. - bufh


المفضلة لدي كانت دائما:

curl ifconfig.me

بسيطة وسهلة في الكتابة.

سيكون عليك تثبيت curl أولاً؛)

إذا كان ifconfig.me قد خفف من محاولة icanhazip.com و أو ipecho.net

curl icanhazip.com

أو

curl ipecho.net

103
2018-06-01 12:41



@ Z9iT ، لقد راجعت هذا الآن. نعم ، فإنه إخراج IP الخارجي في المحطة الطرفية الخاصة بك. - saji89
وقت الاستجابة من ifconfig.me يبدو أبطأ قليلا جدا من ipecho.net. - Drew Noakes
إذا لم يكن لديك curl ولكن لديها wget: wget -U curl -qO- ifconfig.me - Stéphane Chazelas
يبدو أن ifconfig.me لا يستجيب :( - Asfand Qazi
AsfandYarQazi - أعمل هنا. يمكنك تجربة أحد المناوبين ، icanhazip.com - Panther


icanhazip.com هو المفضل لدي.

curl icanhazip.com

يمكنك طلب IPv4 صراحة:

curl ipv4.icanhazip.com

إذا لم يكن لديك curl يمكنك استخدام wget في حين أن:

wget -qO- icanhazip.com

55
2018-06-01 17:23



محاولة ipv4.icanhazip.com - yprez
عناوين IPv4: curl ipv4.icanhazip.com     الإصدار IPv6: curl ipv6.icanhazip.com - Peter
ليس لدى Busybox حليقة ، استخدمها بدلاً من ذلك: wget -qO- http://icanhazip.com - Hengjie
في ما يلي أمر bash-only: exec 3<>/dev/tcp/icanhazip.com/80 && echo -e 'GET / HTTP/1.0\n' >&3 && cat <&3 - jfs
ipv6.icanhazip.com يبدو أنه لم يعد يعمل. - Hibou57


لقد وجدت كل شيء مزعجًا وبطيئًا ، لذا كتبت كتاباتي الخاصة. انها بسيطة وسريعة.

واجهة برمجة التطبيقات قيد التشغيل http://api.ident.me/

أمثلة:

curl ident.me
curl v4.ident.me
curl v6.ident.me

44
2018-01-03 15:49



Woah ، هذا كان هل حقا بسرعة! - waldyrious
وجدت الحل icanhazip.com أسرع ويتضمن سطر جديد في الإخراج. - Tyler Collier
نعم ، لقد كان أسرع بالفعل في الآونة الأخيرة. فقط عدلت حولي. - Pierre Carrier
مجد! سنتان وما زلت تحافظ عليه. أحسنت. "IDENTify ME" ، هو ما يتبادر إلى ذهني ، عندما أحتاج إلى التحقق من الملكية الفكرية :) - Mohnish
PierreCarrier v6.ident.me لا يعمل - SebMa


يمكنك استخدام طلب DNS بدلاً من طلب HTTP لمعرفة عنوان IP العام الخاص بك:

$ dig +short myip.opendns.com @resolver1.opendns.com

يستخدم resolver1.opendns.com خادم DNS لحل السحرية myip.opendns.com اسم المضيف ل ك عنوان IP.


37
2018-02-27 15:07



هذا هو هل حقا بسرعة. لقد قمت بتنفيذ عملية إحماء واحدة ، ثم نفذت 10 إعدامات لكل من هذا و curl icanhazip.com. متوسط ​​ل curl الإصدار: 174ms. متوسط ​​إصدار DNS فقط: 9 مللي ثانية. ~ 19x أسرع. أنظر أيضا: unix.stackexchange.com/a/81699/8383 - Adam Monsen
AdamMonsen نشكرك على الرابط. إن الهدف من استخدام DNS (كما تقول الإجابة التي ذكرتها) هو أن الاستجابة قياسية (ومن غير المرجح أن تتغير) وقد تستمر الخدمة (OpenDNS) لفترة أطول من معظم بدائل http الخاصة بها. الوقت الذي يستغرقه تقديم الطلب قد يكون مظللًا بوقت بدء القيادة. - jfs
نعم. لن أكون مندهش إذا curl نفسه أبطأ من dig. حتى لو تم إعادة كتابتها لتكون مشابهة قدر الإمكان ، curl ستبقى أبطأ يستخدم HTTP (بما فيها DNS) و dig يستخدم DNS فقط. - Adam Monsen


الشخص الذي أستخدمه هو:

wget -O - -q icanhazip.com

نعم ، يمكنك الحصول على ip :-)


18
2018-01-16 14:20



أنا أفضل curl icanhazip.com بعض الأحيان wget هو الوحيد المتاح ، ولكن في بعض الأحيان لا wget هو متاح كذلك و curl هو الخيار الوحيد الخاص بك (مثل OS / X). اما الطريقة curl icanhazip.com يكاد يكون سهلا كما curl ifconfig.me ولكن أكثر تسلية ؛-) - TryTryAgain


الأمازون AWS

curl http://checkip.amazonaws.com

إخراج العينة:

123.123.123.123

أحبها لأن:

  • تقوم بإرجاع عنوان IP العادي فقط ، ولا شيء آخر
  • هو من موفر معروف جيدًا ومن غير المرجح أن يتم تشغيله في أي وقت قريب

16
2017-12-21 22:06





اكتب في هذا بالضبط ، اضغط أدخل حيث يشار:

telnet ipecho.net 80أدخل
GET /plain HTTP/1.1أدخل
HOST: ipecho.net  أدخل
BROWSER: web-kitأدخل
أدخل

يرسل هذا يدويًا طلب HTTP ، والذي سيعيد عنوان IP الخاص بك في أسفل HTTP/1.1 200 OK reply

مثال على الناتج:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0

12
2017-07-02 06:38



لطيفة ، هذا العمل جيد ، عدم الحاجة إلى تثبيت curl كان ميزة بالنسبة لي: بطانة واحدة: printf "GET / عادي HTTP / 1.1 \ nHOST: ipecho.net \ nBROWSER: web-kit \ n \ n" | nc ipecho.net 80 - Ozone


آخر سريع واحد (قد يكون أسرع ، نسبيا)

curl ipecho.net/plain

9
2017-12-31 20:49





لهذا، STUN اخترع. بصفتك عميل ، يمكنك إرسال طلب إلى خادم STUN متاح للجمهور وجعله يرد عنوان IP الذي يراه. نوع من مستوى منخفض whatismyip.com لأنه لا يستخدم HTTP و لا خوادم DNS وضعت بذكاء ولكن بروتوكول STUN سريع التزجيج.

عن طريق stunclient

اذا كنت تمتلك stunclient المثبتة (apt-get install stuntman-client على debian / ubuntu) يمكنك ببساطة القيام بما يلي:

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

أين A.B.C.D هو عنوان IP لجهازك على الشبكة المحلية و W.X.Y.Z هو خوادم عنوان IP مثل مواقع الويب ترى من الخارج (واحد الذي تبحث عنه). عن طريق sed يمكنك تقليل الناتج أعلاه إلى عنوان IP فقط:

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

ومع ذلك ، كان سؤالك هو كيفية العثور عليه باستخدام سطر الأوامر ، والذي قد يستبعد استخدام عميل STUN. لذلك أتساءل ...

عن طريق bash

يمكن تصميم طلب STUN يدويًا وإرساله إلى خادم STUN خارجي باستخدام netcat ويكون بعد معالجتها باستخدام dd، hexdump و sed مثل ذلك:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

يحدد الصدى طلب STUN ثنائي (0x0001 يشير إلى طلب ملزم) بعد طوله 8 (0x0008) مع ملف تعريف الارتباط 0xc00cee وبعض الأشياء الملصقة من wireshark. يتم أخذ 4 بايت فقط تمثل IP الخارجي من الإجابة وتنظيفها وطباعتها.

العمل ، ولكن لا يوصى باستخدامه للإنتاج :-)

ملاحظة تتوفر العديد من خوادم STUN لأنها تقنية أساسية لـ SIP و WebRTC. يجب أن يكون استخدام واحد من Mozilla آمنًا للخصوصية ولكن يمكنك أيضًا استخدام طريقة أخرى: قائمة ملقم STUN


8
2017-10-09 17:21



+1 للحصول على التكنولوجيا geekiest وفعلا معظم المصرف. يعمل استعلام http ، وهو ما كنت أستخدمه طوال حياتي ، لكني أحب أن هناك بالفعل بعض التفكير في السؤال. لم أكن أعرف هذا. شكر! - Mike S