ฉันจะรับที่อยู่สาธารณะของฉันจากบรรทัดคำสั่งได้อย่างไรหากฉันอยู่หลังเราเตอร์


37

มีวิธีให้ฉันรับที่อยู่สาธารณะของฉัน (WAN) บนบรรทัดคำสั่งหรือไม่ ฉันอยู่หลังเราเตอร์ (เครือข่าย LAN) โดยมีที่อยู่ IP แบบไดนามิกที่กำหนดโดย ISP ของฉัน

ฉันเห็นวิธีแก้ไขปัญหาโดยใช้เว็บเซอร์ภายนอก (เช่นifconfig.me) แต่ฉันต้องการทราบว่าฉันสามารถทำได้โดยไม่ต้องใช้บริการจากภายนอก


คุณช่วยเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าเครือข่ายของคุณได้ไหม? คุณอยู่เบื้องหลังเราเตอร์ / สวิทช์ซึ่งไมมีการเข้าถึงอินเทอร์เน็ตและคุณกำลังพยายามที่จะสืบหาที่อยู่ IP WAN ว่าเราเตอร์ / สวิทช์จะได้รับจาก ISP ของคุณหรือไม่
slm

@slm ฉันอยู่หลังเราเตอร์และมดเพื่อค้นหา ip ที่กำหนดให้กับเราเตอร์โดย ISP
user61954

ดูวิธีที่ 3 ที่ฉันเพิ่งเพิ่มไปยังคำตอบของฉัน คุณจะต้องการดูว่ามีวิธีรับ WAN IP ของคุณจากเราเตอร์ของคุณหรือไม่ เราเตอร์ยี่ห้อ / รุ่นใด
slm

คุณต้องสอบถามบริการภายนอกบางประเภท โดยทั่วไปคอมพิวเตอร์ไม่ทราบว่าที่อยู่ IP ของคอมพิวเตอร์เครื่องอื่นจะเห็นการเชื่อมต่อที่มาจากไหน
David Schwartz

คำตอบ:


27

สมมติว่าระบบของคุณมีอุปกรณ์อีเธอร์เน็ตที่ 2 eth0และeth1และeth0จะเชื่อมต่อกับระบบ LAN ของคุณบอกว่า IP ที่ 192.168.1.X ของคุณและeth1อุปกรณ์ที่มีการเชื่อมต่อกับ ISP (WAN) คุณจะต้องการที่จะใช้ต่อไปนี้ifconfigคำสั่งที่จะได้รับ IP ของคุณสำหรับ ด้าน WAN

หมายเหตุ:วิธีที่ 2 วิธีที่ 1 สมมติว่าคุณใช้กับคอมพิวเตอร์ที่มีอุปกรณ์อีเธอร์เน็ต 2 เครื่องและหนึ่งในนั้นเชื่อมต่อกับ ISP ของคุณ (เคเบิลโมเด็มและ / หรือโมเด็ม DSL) ในสถานการณ์นี้อุปกรณ์อีเธอร์เน็ต (eth1) จะถูกกำหนดค่าด้วยที่อยู่ IP ของคุณบนอินเทอร์เน็ต (WAN IP)

วิธีที่ 1

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

คุณยังสามารถใช้ipคำสั่ง

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

วิธีที่ 2

หากคุณต้องการค้นหาสิ่งนี้จากระบบที่อยู่บน LAN เท่านั้นคุณสามารถตั้งค่าคีย์รหัสผ่าน ssh ที่ไม่มีข้อความรหัสผ่านและเพิ่มลงในบัญชีบนเครื่อง LAN ของคุณเพื่อให้สามารถเข้าถึงระบบจากระยะไกลด้วยการเข้าถึงแบบ WAN ได้

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

วิธีที่ 3

หากคุณไม่สามารถ ssh ลงในกล่องที่มีการเข้าถึง WAN และคุณกำลังใช้เราเตอร์ภายในบ้าน / สวิตช์เช่นกล่อง Linksys หรือ Netgear คุณอาจได้รับ IP จากอุปกรณ์นั้นผ่านหน้าสถานะ HTTP ฉันเคยทำสิ่งนี้มาแล้วในอดีตสิ่งที่คล้ายกับที่อธิบายไว้ในโพสต์ฟอรัม whatismyip.comนี้

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

หมายเหตุ:วิธีการนี้ขึ้นอยู่กับว่าคุณมีเราเตอร์ / สวิตช์ใดบ้างไม่ว่าจะเป็น Linksys, Netgear ฯลฯ แต่ละคนจะมีหน้าพิเศษของตัวเองพร้อมกับ IP ของ WAN

วิธีที่ 4

การส่งเคียวรีกับไซต์อินเทอร์เน็ตภายนอกซึ่งจะรายงานที่อยู่ IP WAN ของคุณกลับมา

หมายเหตุ:ฉันทราบว่าคำถามเดิมกล่าวว่าพวกเขากำลังมองหาทางเลือกสำหรับวิธีการนี้ แต่ฉันวางไว้ที่นี่เพื่อที่คำตอบนี้จะครอบคลุมทุกฐาน

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

มีข้อมูลเพิ่มเติมที่นี่: HOWTO: ตรวจสอบที่อยู่ IP ภายนอกของคุณจากบรรทัดคำสั่ง


ฉันมีบางสิ่งบางอย่างเช่นระบบของฉันเชื่อมต่อกับเราเตอร์และเชื่อมต่อกับ
อินทราเน็ต

5
เนื่องจากเขากล่าวว่าเขาไม่ได้เชื่อมต่อโดยตรงดังนั้นไม่มีeth*อุปกรณ์ใดที่จะมี WAN IP ถ้าเราเตอร์ของเขาไม่รองรับ ssh เขาจะสามารถเข้าถึงและ ifconfig สิ่งนี้จะไม่ทำงาน ไม่ใช่ downvoting แต่เพียงเพื่อให้ทุกคนที่พยายามทำเช่นนี้ทราบ
AaronLS

อ่านคำถามของเขาอีกครั้ง เขาบอกว่าเขามีการเข้าถึง LAN ไม่ใช่แค่การเข้าถึงอินเทอร์เน็ตรายการ # 1 รายการ # 2 บอกว่าเขาได้รับ IP แบบไดนามิกจาก ISP ของฉันฉันสมมติว่าเขามีระบบอื่นในการเชื่อมต่อ LAN และ b / w ของเขาเท่านั้นหรืออินเทอร์เน็ตหรือเขามีเราเตอร์ที่บ้าน / เปลี่ยน b / w เขาและอินเทอร์เน็ต
slm

Downvoters ลองแสดงความคิดเห็นคำตอบนี้เป็นที่สมบูรณ์แบบที่สุดและยังมีคนลงคะแนน @ user61954 ถึงกับพูดในความคิดเห็นของเขาว่าเขาอยู่หลังเราเตอร์ดังนั้นวิธีการอย่างหนึ่งที่ฉันได้อธิบายจะใช้ได้
slm

ฉันโหวตขึ้น แต่วิธีแรกและวิธีที่สองไม่ทำงานจะส่งคืนที่อยู่โลคัลเท่านั้น ขอบคุณ!
Jared Burrows

12

หากระบบของคุณมีการติดตั้ง curl (ส่วนใหญ่ทำ) คุณสามารถใช้

curl ifconfig.me

เฮ้ขอบคุณความช่วยเหลือนี้สำหรับฉันแค่คำถามเดียวอะไรคือ "ifconfig.me" ฉันรู้ว่าฟังก์ชั่น ifconfig แต่ฉันไม่ได้เป็นแบบนี้ ได้โปรดให้ลิงค์แก่ฉันเพื่ออ่านหรืออธิบาย - อัปเดต - ไม่ได้อ่านคำถาม ups
Aby W

ifconfig.me เป็นเว็บไซต์ที่ให้ IP ของคุณแก่คุณ
Rory

ifconfig.me ไม่รองรับ https ดังนั้นจึงอาจมีการปลอมแปลง ไม่ใช่ความคิดที่ดีที่จะใช้เพื่อตรวจสอบว่า VPN ของคุณใช้งานได้หรือไม่
Dan Dascalescu

9

เมื่อคุณอยู่หลัง NAT Router ด้วย UPNP คุณสามารถใช้ miniupnpc เพื่อตรวจหาที่อยู่ IP ของ wan:

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

คุณสามารถใช้มันในสคริปต์เช่น cron เช่น:

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi

5

เป็นไปได้มากที่สุดที่เราเตอร์จะต้องให้วิธีการรับ IP ภายนอกหากไม่มีบริการภายนอกที่ควรหรือสามารถใช้ (ตามคำตอบอื่น ๆ ที่ระบุไว้แล้ว) สำหรับบริการภายนอกโดยส่วนใหญ่คำตอบอื่น ๆ จะใช้บริการเว็บ คำตอบนี้ที่ Unix SE แนะนำให้ใช้ DNS แทน

ตัวอย่างเช่นใช้digกับOpenDNSเป็นตัวแก้ไข:

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

1 แต่ในตอนท้าย o วัน fthe ของตนเช่นเดียวกับที่ใช้curl ident.meในขณะที่เราจะอาศัยระบบปฏิบัติการบริการที่เฉพาะเจาะจง (ในmyip.opendns,comเป็นพิเศษดาดโดยเซิร์ฟเวอร์ DNS โพธิสัตว์)
nhed

4

ดึงข้อมูลจากเราเตอร์ของคุณผ่าน ssh หรือ curl

ฉันใช้ curl เพื่อถาม dyndns สำหรับ ip สาธารณะของฉัน แต่ดูเหมือนว่าคำสั่งดังกล่าวจะไม่เหมาะกับคุณใช่ไหม

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'


2

น่าเสียดายที่ไม่มีวิธีการตรวจสอบกลไกเช่น NAT ที่ไม่เกี่ยวข้องกับการติดต่อบริการระยะไกล NAT นั้นโดยธรรมชาติแล้วโปร่งใสต่อผู้ใช้นอกเหนือจากบริการที่เสียหายและไม่มีโปรโตคอลมาตรฐานสำหรับการค้นพบ NAT

แต่เท่าที่มีการบริการจากภายนอกฉันต้องแนะนำอย่างรวดเร็วและง่าย ๆ ที่ฉันเขียน ident.me ซึ่งคุณสามารถใช้ได้ทั้ง IPv4 และ IPv6 สำหรับแบบฟอร์มที่ง่ายที่สุดที่คุณสามารถใช้ได้curl ident.meและ API แบบเต็มมีการบันทึกไว้ที่http://api.ident.me/


1

หากเราเตอร์ของคุณรองรับNAT PMP (โปรโตคอลการจับคู่พอร์ต) คุณอาจสามารถเรียกคืน IP สาธารณะของคุณโดยใช้ natpmp

มีอินเตอร์เฟสบรรทัดคำสั่งกับไลบรารี linux natpmp ชื่อ natpmpc บน Ubuntu ก็ในnatpmp-utilsแพคเกจ เราเตอร์ของฉันไม่สนับสนุน natpmp ดังนั้นฉันไม่แน่ใจว่าอรรถประโยชน์ natpmpc จะส่งคืน IP สาธารณะของคุณ


0

คำสั่ง linux ที่คุณต้องการคือifconfigสมมติว่าคุณเชื่อมต่อกับอินเทอร์เน็ตโดยตรง

หากไม่และเข้าถึงผ่านพร็อกซีหรือการกำหนดเส้นทางพิเศษวิธีที่ง่ายที่สุด (ตามที่คนอื่นระบุ) คือการเข้าสู่ระบบ / เข้าถึงโฮสต์อื่นและตรวจสอบจากที่นั่น

นอกจากนี้คุณอาจต้องการสนทนาคำถามนี้กับผู้ดูแลระบบพื้นที่ใกล้เคียงที่เป็นมิตรของคุณ


ifconfigเลิกใช้แล้ว
BatchyX

"คำสั่ง traceroute แต่จะให้ IP ท้องถิ่นของ lan, 192.168.1.1" ดังนั้นฉันเดาว่ามี LAN ดังนั้นจะต้องมีเราเตอร์ / เกตเวย์ / นัทอยู่บ้าง จากนั้น ifconfig จะไม่ให้ที่อยู่ IP สาธารณะเนื่องจากคอมพ์ของ op ไม่ได้เชื่อมต่อกับอินเทอร์เน็ตโดยตรง

@BatchyX คุณใช้ระบบปฏิบัติการอะไร ทุกระบบที่ฉันใช้อยู่มี ifconfig Fedora, CentOS, Ubuntu และอื่น ๆ
slm

2
@batchx: แล้วคุณจะได้รับข้อมูลจากที่ไหน? ฉันไม่เห็นด้วยกับคุณในสิ่งนั้น
mdpc

1
@sim: เนื่องจากคำสั่งมีอยู่ไม่ได้หมายความว่าจะไม่คัดค้าน เพียงดูifconfigวันที่วางจำหน่ายล่าสุด ตอนนี้ดูìproute2รุ่นล่าสุด สำหรับแหล่งที่มาโปรดดูlartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

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