คำสั่งสำหรับกำหนด IP สาธารณะของฉัน


636

ถ้าฉันตรวจสอบกับgoogleฉันสามารถดู IP สาธารณะของฉันได้ มีบางอย่างในบรรทัดคำสั่งของ Ubuntu ซึ่งจะให้คำตอบเดียวกันกับฉันหรือไม่?


2
"มี IP แบบไดนามิก", "SSH ใช้ระบบอื่นผ่านอินเทอร์เน็ต", "คำสั่งที่จะแสดง IP สาธารณะปัจจุบัน" คุณเห็นปัญหาไก่ / ไข่ที่นี่ไหม คุณจะสามารถรันคำสั่งบนเซิร์ฟเวอร์ระยะไกลได้อย่างไรโดยไม่ทราบที่อยู่ คุณอาจสนใจในบริการต่าง ๆ เช่น no-ip.com / DynDNS.org
gertvdijk

หนึ่งไม่สามารถ SSH โดยไม่รู้ IP สาธารณะเพื่อนของฉัน ... dynDNS ค่าใช้จ่ายมากและไม่มีงาน ip ยาก แต่สถานการณ์ไม่อนุญาตที่ ... อย่างไรก็ตามคำถามที่ได้รับการตอบแล้ว .. ขอบคุณสำหรับคำแนะนำของคุณ
Bhavesh Diwan

1
PS duckduckgo.com/?q=ip (ไม่มีบรรทัดคำสั่ง แต่ไม่มีพี่ใหญ่ G ไม่ใช่)
Campa

1
อาจเป็นคำถามแยกต่างหาก แต่ฉันต้องการเห็นการแจ้งเตือนเมื่อที่อยู่ IP สาธารณะของฉันเปลี่ยนแปลง สำหรับตอนนี้ฉันแค่ใช้คำตอบต่อไปนี้ใน crontab notify-sendด้วย
PJ Brunet

โซลูชั่นที่ดีด้านล่าง สำหรับการใช้ Centos: ifconfig eth1 | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*inet *([^ ]+).*/\2/p}'โดยที่ eth1 เป็นอุปกรณ์เครือข่ายที่มีความสนใจคุณสามารถละเว้นสตริง 'et1' เพื่อแสดง ips ทั้งหมดของอะแดปเตอร์ทั้งหมด แทนที่จะเป็น\2คุณสามารถเขียน\1 \2เพื่อแสดงชื่อของแต่ละอะแดปเตอร์ได้เช่นกัน
Hafenkranich

คำตอบ:


916

ifconfigหากคุณไม่ได้อยู่เบื้องหลังเราเตอร์คุณสามารถค้นหาได้ออกมาใช้

หากคุณอยู่หลังเราเตอร์คอมพิวเตอร์ของคุณจะไม่ทราบเกี่ยวกับที่อยู่ IP สาธารณะเนื่องจากเราเตอร์ทำการแปลที่อยู่เครือข่าย คุณสามารถขอเว็บไซต์บางสิ่งที่อยู่ IP สาธารณะของคุณใช้curlหรือwgetและสารสกัดจากข้อมูลที่คุณต้องการจากมัน:

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

หรือสั้นกว่า

curl https://ipinfo.io/ip

27
ty - ทันทีหลังจากที่ฉันโพสต์ฉันรู้ว่าฉันไม่ได้ google สำหรับคำตอบแรก: ดูเหมือนว่านี้จะทำงานcurl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' ความเป็นไปได้อื่น ๆ อยู่ที่นี่: go2linux.org/what-is-my-my-public-ip-address-with-linux
kfmfe04

1
แน่นอน - คุณสามารถเพิ่มคำตอบของคุณได้
kfmfe04

1
เพื่อชี้แจง: นั่นคือการแฮ็กและเป็นสิ่งที่น่าเกลียดมากดังนั้นฉันจึงทำการแก้ไขเพื่อให้ง่ายขึ้นและบางสิ่งที่ผู้คนจำได้
jrg

2
Exacly ดังที่ Giovanni P ระบุ OP ควรเปลี่ยน anwser ที่ยอมรับ
loostro

36
curl -s ipinfo.io/ip
chao

385

สำหรับการค้นหา ip ภายนอกคุณสามารถใช้บริการบนเว็บภายนอกหรือใช้วิธีการตามระบบ หนึ่งง่ายคือการใช้บริการภายนอกยังifconfigโซลูชั่นที่จะทำงานในระบบของคุณ NATแต่ถ้าคุณไม่ได้อยู่เบื้องหลัง ทั้งสองวิธีได้รับการกล่าวถึงในรายละเอียดด้านล่าง

ค้นหา IP ภายนอกโดยใช้บริการภายนอก

วิธีที่ง่ายที่สุดคือการใช้บริการภายนอกผ่านเบราว์เซอร์ commandline หรือเครื่องมือดาวน์โหลด เนื่องจากwgetเป็นค่าเริ่มต้นใน Ubuntu เราจึงสามารถใช้มันได้
เพื่อหาไอพีของคุณให้ใช้

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

มารยาท :

คุณสามารถใช้lynx(เบราว์เซอร์) หรือcurlแทนที่wgetด้วยคำสั่งย่อยข้างบนเพื่อค้นหาไอพีภายนอกของคุณ

ใช้curlเพื่อค้นหา ip:

$ curl https://ipecho.net/plain

เพื่อการใช้งานในรูปแบบเอาต์พุตที่ดีขึ้น:

$ curl https://ipecho.net/plain ; echo

ที่รวดเร็ว (เนื้อหาที่เร็วที่สุด) วิธีการใช้digที่มีOpenDNSเป็นตัวจำแนก:

คำตอบอื่น ๆ ที่นี่ทั้งหมดผ่าน HTTP ไปยังเซิร์ฟเวอร์ระยะไกล บางส่วนต้องการการแยกวิเคราะห์เอาต์พุตหรือใช้ส่วนหัว User-Agent เพื่อให้เซิร์ฟเวอร์ตอบกลับเป็นข้อความธรรมดา พวกเขายังเปลี่ยนค่อนข้างบ่อย (ลงไปเปลี่ยนชื่อวางโฆษณาอาจเปลี่ยนรูปแบบเอาท์พุท ฯลฯ )

  1. โปรโตคอลการตอบสนอง DNS เป็นมาตรฐาน (รูปแบบจะเข้ากันได้)
  2. บริการ DNS ในอดีต (OpenDNS, DNS สาธารณะของ Google, .. ) มีแนวโน้มที่จะอยู่รอดได้นานกว่าและมีความเสถียรสามารถปรับขนาดได้และดูแลโดยทั่วไปมากกว่าบริการ HTTP whatismyip.com HTTP ที่ทันสมัยที่สุด
  3. (สำหรับผู้ที่สนใจเกี่ยวกับการเพิ่มประสิทธิภาพขนาดเล็ก) วิธีนี้ควรเร็วขึ้นโดยเนื้อแท้ (ไม่กี่วินาทีเท่านั้น)

การใช้ dig กับ 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

หมายเหตุ:ผลลัพธ์เป็นสิ่งบ่งชี้และไม่ใช่ของจริง

มารยาท: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

UPDATE

  1. LANG=cได้รับการเพิ่มเข้ากับifconfigประเพณีที่ใช้เพื่อที่จะให้ผลภาษาอังกฤษเสมอโดยไม่คำนึงถึงการตั้งค่าสถานที่

1
@ Z9iT, แน่นอน .. มันควรจะทำงานในการกระจาย linux ใด ๆ โดยที่คุณได้ติดตั้งแล้ว ดังที่ได้กล่าวไปแล้วถ้าคุณมี curl หรือ lynx อยู่แล้วโปรดใช้มันแทน คุณจะต้องได้รับอนุญาตการติดตั้งเพื่อใช้งานsudo apt-get install wget
saji89

13
คำสั่งที่มี ifconfig จะใช้งานได้เฉพาะถ้าคุณไม่ได้อยู่หลัง NAT
lukassteiner

1
เพียงใช้-wตัวเลือกขดแทนที่จะสะท้อน :)curl -w '\n' ident.me
drAlberT

3
ข้อเสนอนี้โดยใช้ขุดเป็นสิ่งที่ดีงามunix.stackexchange.com/questions/22615/ …
binaryanomaly

4
รุ่นล่าสุดที่ไม่มีบริการภายนอกจะทำงานได้ก็ต่อเมื่อคอมพิวเตอร์ของคุณเชื่อมต่อโดยตรงกับอินเทอร์เน็ตซึ่งไม่ค่อยเกิดขึ้นหรือคุณจะได้รับที่อยู่ IP ในพื้นที่ของคุณเท่านั้น
rubo77

117

สิ่งที่ฉันชอบคือ:

curl ifconfig.me

ง่ายง่ายต่อการพิมพ์

คุณจะต้องติดตั้ง curl ก่อน;)

หาก ifconfig.me ไม่ทำงานให้ลอง icanhazip.com และหรือ ipecho.net

curl icanhazip.com

หรือ

curl ipecho.net

3
@ Z9iT ฉันเพิ่งตรวจสอบตอนนี้ ใช่มันจะเอาท์พุท ip ภายนอกใน terminal ของคุณ
saji89

7
เวลาตอบสนองจากนั้นifconfig.meค่อนข้างช้ากว่าipecho.netเล็กน้อย
Drew Noakes

3
หากคุณไม่ได้มีcurlแต่มีwget:wget -U curl -qO- ifconfig.me
Stéphane Chazelas

2
ifconfig.me ดูเหมือนจะไม่ตอบสนอง :(
Asfand Qazi

1
@AsfandYarQazi - ทำงานที่นี่ คุณสามารถลองใช้ตัวเลือกอย่างใดอย่างหนึ่งได้ที่ icanhazip.com
Panther

60

icanhazip.comเป็นรายการโปรดของฉัน

curl icanhazip.com

คุณสามารถร้องขอ IPv4 ได้อย่างชัดเจน:

curl ipv4.icanhazip.com

หากคุณไม่มีcurlคุณสามารถใช้wgetแทน:

wget -qO- icanhazip.com

ขอบคุณ! ฉันต้องลองหลายข้อแนะนำข้างต้นจนกระทั่งพบบางอย่างที่สามารถใช้กับ IPv6 เป็นเรื่องน่าอายที่บริการดังกล่าวมักจะยังคงเป็น IPv4 เท่านั้น
VladimírČunát

48

ฉันพบว่าทุกอย่างน่ารำคาญและช้าดังนั้นฉันจึงเขียนเอง มันง่ายและรวดเร็ว

API ของมันอยู่ที่http://api.ident.me/

ตัวอย่าง:

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

1
ว้าวเร็วมากจริงๆ !
waldyrious

1
ฉันค้นหาโซลูชัน icanhazip.comเร็วขึ้นและมีบรรทัดใหม่ในผลลัพธ์
Tyler Collier

1
ใช่เร็ว ๆ นี้แน่นอน เพิ่ง tweaked โซลูชันของฉัน
Pierre Carrier

2
รุ่งโรจน์! 2 ปีและคุณยังคงรักษามันไว้ ทำได้ดี. "ระบุ ME" เป็นสิ่งที่อยู่ในใจของฉันเมื่อฉันต้องเช็ค IP :)
Mohnish

AWS เร็วtime curl http://checkip.amazonaws.com-> 0.91sVS .241sสำหรับident.meให้เพียงอธิษฐาน AWS ไม่ได้ลงไป;)
Avindra Goolcharan

42

คุณสามารถใช้คำขอ DNS แทนคำขอ HTTP เพื่อค้นหา IP สาธารณะของคุณ:

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

จะใช้resolver1.opendns.comเซิร์ฟเวอร์ DNS เพื่อแก้ไขmyip.opendns.comชื่อโฮสต์ขลังไปยังที่อยู่ IP ของคุณ


3
นี้เป็นจริงอย่างรวดเร็ว ฉันไม่ได้ดำเนินการวอร์มหนึ่งแล้ว 10 curl icanhazip.comประหารชีวิตแต่ละนี้และ ค่าเฉลี่ยสำหรับcurlรุ่น: 174ms ค่าเฉลี่ยสำหรับรุ่น DNS เท่านั้น: 9ms เร็วขึ้น 19x ดูเพิ่มเติมที่: unix.stackexchange.com/a/81699/8383
Adam Monsen

1
@AdamMonsen ขอบคุณสำหรับลิงค์ จุดประสงค์ของการใช้ DNS (ตามคำตอบที่คุณเชื่อมโยงไว้) คือการตอบสนองนั้นเป็นมาตรฐาน (และไม่น่าจะเปลี่ยนแปลง) และบริการ (OpenDNS) อาจติดอยู่นานกว่าทางเลือก http ส่วนใหญ่ เวลาที่ใช้ในการร้องขออาจมีเงาโดยเวลาเริ่มต้นคำสั่ง
jfs

อ๋อ ฉันจะไม่ต้องแปลกใจถ้าตัวเองจะช้ากว่าcurl digแม้ว่าพวกเขาจะถูกเขียนใหม่ให้คล้ายกันมากที่สุดcurlก็จะช้าลง มันใช้ HTTP ( รวมถึง DNS) และdigใช้ DNS เท่านั้น
Adam Monsen

22

Amazon AWS

curl http://checkip.amazonaws.com

ตัวอย่างผลลัพธ์:

123.123.123.123

ฉันชอบมันเพราะ:

  • มันจะส่งกลับเฉพาะ IP ธรรมดา ๆ ไม่มีอะไรอื่น
  • มันมาจากผู้ให้บริการที่รู้จักกันดีซึ่งไม่น่าจะออฟไลน์ได้ทุกเวลาเร็ว ๆ นี้

18

สิ่งที่ฉันใช้คือ:

wget -O - -q icanhazip.com

ใช่คุณสามารถมี ip :-)


3
ฉันชอบcurl icanhazip.comบางครั้งwgetมีเพียงอันเดียวที่มีอยู่ แต่บางครั้งก็ไม่มีwgetให้เลือกเช่นกันและcurlเป็นตัวเลือกเดียวของคุณ (เช่น OS / X) ทั้งสองวิธีcurl icanhazip.comนั้นง่ายพอcurl ifconfig.meๆ กับที่สนุก แต่
;

11

พิมพ์ตรงนี้กดEnterที่ระบุ:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter

วิธีนี้จะส่งคำขอ 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

6
ดีสิ่งนี้ทำงานได้ดีไม่ต้องติดตั้ง curl เป็นข้อได้เปรียบสำหรับฉัน: หนึ่งซับ: printf "GET / HTTP ธรรมดา / 1.1 \ nHOST: ipecho.net \ nBROWSER: web-kit \ n \ n" | nc ipecho.net 80
โอโซน

9

อีกหนึ่งอย่างรวดเร็ว (อาจจะเร็วที่สุดค่อนข้าง)

curl ipecho.net/plain

9

สำหรับสิ่งนี้STUNถูกประดิษฐ์ขึ้น ในฐานะลูกค้าคุณสามารถส่งคำขอไปยังเซิร์ฟเวอร์ STUN ที่เปิดเผยต่อสาธารณะและให้ที่อยู่ IP นั้นกลับคืนมา เรียงลำดับจาก whatismyip.com ระดับต่ำเนื่องจากไม่มี HTTP และไม่มีเซิร์ฟเวอร์ DNS ที่ออกแบบมาอย่างชาญฉลาด แต่มีโปรโตคอล STUN ที่รวดเร็วอย่างน่าทึ่ง

การใช้ stunclient

หากคุณstunclientติดตั้ง ( apt-get install stuntman-clientบนเดเบียน / อูบุนตู) คุณสามารถทำได้:

$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/'

echo กำหนดคำร้องขอ STUN แบบไบนารี (0x0001 หมายถึง Binding Request) ที่มีความยาว 8 (0x0008) กับคุกกี้ 0xc00cee และบางสิ่งที่วางจาก wireshark มีเพียงสี่ไบต์ที่เป็นตัวแทนของ IP ภายนอกเท่านั้นที่นำมาจากคำตอบล้างและพิมพ์

ใช้งานได้ แต่ไม่แนะนำให้ใช้กับการผลิต :-)

PS เซิร์ฟเวอร์ STUN จำนวนมากพร้อมใช้งานเนื่องจากเป็นเทคโนโลยีหลักสำหรับ SIP และ WebRTC การใช้งานจาก Mozilla ควรปลอดภัยต่อความเป็นส่วนตัว แต่คุณสามารถใช้รายชื่อเซิร์ฟเวอร์ STUNอื่นได้


+1 สำหรับเทคโนโลยีที่ยอดเยี่ยมที่สุดและเป็นจริงมากที่สุด http การค้นหาใช้งานได้ซึ่งเป็นสิ่งที่ฉันใช้มาตลอดชีวิต แต่ฉันชอบที่มีความคิดที่จะนำไปสู่คำถาม ฉันไม่รู้สิ่งนี้ ขอบคุณ!
Mike S

7

ฉันมีบริการโง่นี้โดย telnet บางสิ่งเช่นนี้

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

รู้สึกอิสระที่จะใช้มัน


5

คุณสามารถอ่านหน้าเว็บโดยใช้เพียงทุบตีโดยไม่ต้องcurl, wget:

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd

สิ่งนี้รวมกับcheckip.amazonaws.comสิ่งที่เร็วที่สุดสำหรับฉัน
Avindra Goolcharan

1
@AvindraGoolcharan ลองใช้คำขอ dns
jfs

2

สำหรับพวกเราที่เข้าสู่ระบบเราเตอร์ของเราโดยใช้สคริปต์เพื่อถามเราเตอร์ว่า 'ที่อยู่ IP ของ WAN นั้นเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการกำหนดที่อยู่ IP ภายนอก ตัวอย่างเช่นสคริปต์ python ต่อไปนี้พิมพ์ IP ภายนอกสำหรับเราเตอร์ Medialink MWN-WAPR300N ของฉัน:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

โปรดทราบว่านี่ไม่ปลอดภัยมาก (เช่นกรณีที่มีข้อมูลประจำตัวของข้อความธรรมดา & การเข้าสู่เราเตอร์ส่วนใหญ่) และไม่แน่นอนพกพา (ต้องเปลี่ยนสำหรับเราเตอร์แต่ละตัว) อย่างไรก็ตามมันเป็นวิธีที่รวดเร็วและเป็นวิธีที่เหมาะสมที่สุดในเครือข่ายภายในบ้านที่ปลอดภัย

ในการปรับแต่งสคริปต์สำหรับเราเตอร์อื่นฉันขอแนะนำให้ใช้ tamperdata addon ใน firefox เพื่อกำหนดว่าจะให้ HTTP ร้องขออะไร


2
คุณควรลองรับที่อยู่ IP ของเราเตอร์ตามหลักไวยากรณ์ router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]เช่น
Cristian Ciupitu

2

สิ่งเหล่านี้จะได้รับ IP ท้องถิ่น:

ifconfig

หรือสำหรับผลผลิตที่สั้นลง:

ifconfig | grep inet

ด้วย

ip addr show

และอาจจะ:

hostname -I

สิ่งนี้ควรได้รับ IP ภายนอก

wget http://smart-ip.net/myip -O - -q ; echo

NBถ้าคุณไม่รังเกียจที่จะติดตั้งcurlสิ่งนี้เช่นกัน:

curl http://smart-ip.net/myip

1
ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}'จะพิมพ์อินเตอร์เฟสโลคัลและ V4 IP ที่สอดคล้องกัน
Hannu

1
ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}'- v4 และ v6 IP
Hannu

2

เราเตอร์ที่บ้านจำนวนมากสามารถสอบถามโดย UPnP:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

จากนั้น grep ที่อยู่ IP จากคำตอบ

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'

2

หากคุณใช้DD-WRTนี่จะใช้ได้กับฉัน:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'

หรือ

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
  • โดยที่ 192.168.1.1 เป็นที่อยู่ IP ของเกตเวย์เกตเวย์ / เราเตอร์ของเราเตอร์ DD-WRT

  • -sส่วนประกอบหมายความเงียบ (เช่นจะไม่แสดงข้อมูลความคืบหน้าขด)

  • โอ้ฉันควรจะพูดถึงว่าผมใช้ข้างต้นด้วย"DD-WRT v24-sp2 (01/04/15) มาตรฐาน"


0

ใช้ip!

ip addr show

จากนั้นมองหาอะแดปเตอร์ที่เกี่ยวข้อง (ไม่ใช่loและโดยปกติeth0) แล้วหาที่อยู่ IP ใกล้inet


2
คำถามเกี่ยวกับสาธารณะไม่ใช่ที่อยู่ IP ภายใน
Wolf

0

บางทีฉันอาจจะสายไปหน่อย แต่ inxi ก็ทำได้ง่ายพอสมควร

ติดตั้ง inxi

sudo apt install inxi

จากนั้นรันคำสั่งต่อไปนี้

inxi -i

ตัวอย่างที่ข้อมูลของฉันถูกบล็อกโดยใช้zตัวเลือกสำหรับการคัดลอกและวางไปยังไซต์เช่นนี้:

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

ตรงที่มันบอกว่า<filter>เป็นที่ที่ IP IP ของคุณ, IPv4, ที่อยู่ MAC ฯลฯ จะปรากฏขึ้น


-2

เพียงออก traceroute สำหรับเว็บไซต์หรือบริการใด ๆ ..

sudo traceroute -I google.com

บรรทัดที่ 2 ดูเหมือนจะเป็นที่อยู่ IP สาธารณะของฉันเสมอหลังจากผ่านเกตเวย์เราเตอร์ของฉัน

user@user-PC ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

ดังนั้นให้คำสั่ง bash

sudo traceroute -I google.com | awk -F '[ ]' '{ if ( $2 ="2" ) { print $5 } }'

และผลผลิต ...

(199.21.149.1)

ฉันไม่คิดว่าพึ่งพาสคริปต์ PHP และการเรียงลำดับเป็นแนวปฏิบัติที่ดี


สิ่งนี้น่าสนใจ แต่ช้ามากและไม่ได้รับ ip ภายนอกของฉันเช่นนี้
rubo77

คำตอบนี้ไม่ถูกต้องที่จะเป็นประโยชน์ ในสภาพแวดล้อมขององค์กรฉันไม่ได้รับที่อยู่ IP เลย วิธีเดียวที่ใช้งานได้คือถ้าคุณเข้าใจว่าเราเตอร์และสวิตช์ในตัวเครื่องของคุณถูกสร้างขึ้นมาอย่างไรและถึงแม้ว่ามันอาจจะไม่ได้อยู่บนบรรทัดที่ 2 ขึ้นอยู่กับจำนวนของการกระโดดในท้องถิ่นที่คุณกระโดดข้าม ไม่มีวิธีใดที่จะสร้างอัลกอริธึมที่สอดคล้องกันจากเทคนิคนี้และมีวิธีแก้ปัญหาอื่น ๆ อีกมากมายที่นี่ซึ่งง่ายกว่าและจะให้คำตอบที่ถูกต้องทุกครั้ง
Mike S

ในขณะที่มันอาจทำงานในการกำหนดค่าพิเศษบางอย่างฉันไม่เคยเห็น IP ภายนอกของฉันใน traceroute โดยปกติจะเป็นเกตเวย์ของฉัน (ถ้าฉันไม่ได้อยู่หลัง NAT) หรือเกตเวย์ของเราเตอร์ของฉัน แต่ส่วนใหญ่เราเตอร์บางตัวอยู่ไกลออกไป
mivk

alias ip = 'lynx --dump ipecho.net/plain '
phildobbin

-2

คำสั่งที่ไม่มีการขึ้นต่อกันยกเว้น 8.8.8.8 เป็น GOogle DNS:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')

สิ่งนี้บอกเพียงที่อยู่ IP ของอินเทอร์เฟซขาออกในเครื่อง
guntbert

คำสั่งจะแสดงที่อยู่ IP สาธารณะถ้าฉันเรียกใช้บนเซิร์ฟเวอร์คลาวด์ wasn; t คำถามนั้น?
Rolf

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