คำสั่งเชลล์เพื่อรับที่อยู่ IP หรือไม่


24

มีคำสั่ง bash เพื่อค้นหาที่อยู่ IP สำหรับกล่อง Ubuntu หรือไม่ ฉันต้องการค้นหาที่อยู่ IP เพื่อที่ฉันจะได้สามารถเข้าสู่เครื่องได้ในภายหลัง

คำตอบ:


32

/sbin/ifconfig -a


ใช่และถ้าคุณวางแผนที่จะดูแลเซิร์ฟเวอร์จากระยะไกลvi /etc/network/interfacesและตั้งค่าอินเทอร์เฟซเป็นstatic(ดูhelp.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface

การรันคำสั่งนี้จะแสดงรายการตัวเลขทั้งหมด เราควรใช้อันไหนดี? inet addr?
วิทยาศาสตร์คอมพิวเตอร์

25

คุณสามารถใช้ได้:

/bin/ip addr

3
@opierce คุณได้ทำเครื่องหมายคำตอบของ mpbloch ว่าถูกต้อง แต่ในฐานะที่เป็น FYI คุณควรใช้คำตอบนี้เนื่องจากนี่เป็นส่วนหนึ่งของชุด iproute2 ifconfigกำลังจะค่อย ๆ ตอนนี้
jwbensley

3
ip aคุณสามารถทำที่สั้นลงโดยเพียงแค่การทำงาน
gak

19

หากคุณมีที่อยู่ภายในที่ใช้งานอยู่ให้ตรวจสอบ

curl http://myip.dnsomatic.com

อาจเป็นความคิดที่ดีสำหรับยูนิกซ์เชลล์
หรือเพียงแค่เขียน URL นั้นลงในเบราว์เซอร์ของคุณ


ถ้าคุณได้รับคำตอบที่แตกต่างจาก " ifconfig -a" ผลให้อยู่ภายในของคุณ - ซึ่งอาจจะไม่ได้ทำจากภายนอก
ifconfig


แม้ว่าทุกคนจะดูดี แต่คุณสามารถมีไฟร์วอลล์ที่จะไม่อนุญาตการเชื่อมต่อssh ที่เข้ามา
ในเวลาใดที่คุณควรลองพอร์ตที่น่าสนใจจากเบราว์เซอร์บนเครื่องที่

http://www.canyouseeme.org/

ที่จะยืนยันการเชื่อมต่อผ่าน

  • ที่อยู่ IP ภายนอก (แสดงให้คุณเห็นในหน้านั้น)
  • NAT, พอร์ตส่งต่อ
  • ไฟร์วอลล์

เป็นจริง แต่ถ้าเป็นกรณีนี้อาจไม่มีกฎการส่งต่อ NAT / พอร์ตในการจับคู่ ssh กับ IP ภายในใด ๆ
Kyle Brandt

@Kyle ซึ่งสามารถเพิ่ม ...
nik

3
+1 สำหรับcurl http://myip.dnsomatic.com
JatSing

คล้ายกันนี้ยังมีcurl ifconfig.me
jwbensley

19

/bin/hostname -i


3
hostname --all-ip-addressesในกรณีนี้ผมขอแนะนำให้ใช้ แสดงที่อยู่เครือข่ายทั้งหมดของโฮสต์ ตัวเลือกนี้จะระบุที่อยู่ที่กำหนดค่าทั้งหมดในอินเทอร์เฟซเครือข่ายทั้งหมด อินเทอร์เฟซแบบวนรอบและที่อยู่การเชื่อมโยงท้องถิ่น IPv6 ถูกละเว้น ตรงกันข้ามกับตัวเลือก -i ตัวเลือกนี้ไม่ได้ขึ้นอยู่กับการจำแนกชื่อ อย่าตั้งสมมติฐานใด ๆ เกี่ยวกับลำดับของเอาต์พุต
lrkwz

5
ทางเลือกที่สั้นลงสำหรับความคิดเห็นของ @ lrkwz/bin/hostname -I
hanxue

ขอบคุณ @hanxue - นี่ควรจะเป็นคำตอบของมันเอง - คำสั่งที่สั้นที่สุดด้วยเอาต์พุตที่สะอาดที่สุด - สิ่งที่ฉันกำลังมองหา! จากประสบการณ์ของฉัน (Ubuntu) /bin/hostname -iเพียงแค่ให้127.0.1.1ซึ่งไม่มีประโยชน์
Roger Dueck


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

หากคุณต้องการที่อยู่ภายในของคุณผนวกอินเตอร์เฟซของคุณหลังจาก ifconfig เช่น

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1 นี่คือสิ่งที่ฉันต้องการเพื่อแก้ปัญหา Hurray สำหรับหนึ่งตอร์ปิโด!
J. Polfer

+1 โดยไม่ต้องใช้หัว -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {พิมพ์ $ 3}'
joeslice

ขอบคุณมันใช้งานได้กับ Debian แต่ใน OS X มันใช้งานไม่ได้ส่งคืนขยะบางส่วน มันจะดีมากถ้าเราสามารถมีสายที่ใช้ได้กับทั้งคู่ นี่คือผลลัพธ์ของ ifconfig บน OS X: gist.github.com/ssbarnea/5814657
sorin


3

หากคุณต้องการทราบว่าที่อยู่ IP ของเราเตอร์ของคุณคืออะไรคุณสามารถเรียกใช้คำสั่งนี้ได้

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

หากคุณใช้ OpenDNS สำหรับเซิร์ฟเวอร์ dns ของคุณคุณสามารถย่อให้สั้นลงไปที่:

ขุด + short myip.opendns.com

คุณสามารถใช้คำสั่งนี้

http://myip.dnsomatic.com curl

3

หากคุณมีหลายอินเตอร์เฟสอาจเป็นประโยชน์ในการระบุว่าคุณต้องการไอพีใด หากคุณต้องการที่อยู่ IPV4 ของอินเทอร์เฟซ 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

หากคุณต้องการที่อยู่ IPV6 ของอินเทอร์เฟซ 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

หากคุณต้องการค้นหา IP ระหว่างสองอินเตอร์เฟสทั่วไปของแล็ปท็อป wlan0 และ eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done

3

แค่ม้วนหน้านี้:

$ curl wtfismyip.com/text


และนี่คือสิ่งที่เหนือกว่าบริการที่คล้ายกันที่กล่าวถึงแล้วในช่วงปีนี้?
Esa Jokinen

2

นี่คือหนึ่งบรรทัดที่ใช้งานได้บน Linux และ OS X ด้วยและจะส่งคืนที่อยู่แรกที่ไม่ใช่ภายใน:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

ส่งเครดิตไปที่/programming//a/13322549/99834



1

วิธีที่ง่ายที่สุดที่จะไปเกี่ยวกับมันน่าจะเป็น

ifconfig eth0

สมมติว่าเครื่องมีที่อยู่ IP เดียวในอินเตอร์เฟสเริ่มต้นแบบมีสาย - คุณอาจต้องใช้

ifconfig wlan0

ถ้าอยู่ใน WiFi


1
ip address show scope link

มันจะแสดงที่อยู่ IP ของการใช้ชีวิต - มีลิงค์ - อินเตอร์เฟส แต่มันไม่ใช่คำสั่ง bash Bash ไม่สามารถรู้เกี่ยวกับ IP และเครือข่ายได้เลย


1

สิ่งที่ฉันเข้าใจคือคุณต้องการเชื่อมต่อเครื่องอูบุนตูระยะไกลที่มี IP แบบไดนามิก ไปที่เว็บไซต์ dyndns.org และเปิดบัญชีฟรี จากนั้นในเครื่องระยะไกลคุณต้องติดตั้งเครื่องมือ IP แบบไดนามิก

sudo aptitude install dyndns-client

เพื่อให้คุณสามารถ ssh เครื่องระยะไกลผ่านทาง

ssh username@yourdynamicnamealias.dyndns.org

ดังนั้นหลังจากกำหนดค่าคุณจะไม่ต้องการที่อยู่ IP ของเครื่องระยะไกล


นี่เป็นวิธีที่ฉันต้องการสำหรับจัดการกับ IP แบบไดนามิก dyndns.org เป็นบริการที่ยอดเยี่ยมฟรี
John Barrett

1

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

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

หากคุณต้องการเพียง IP เดียวของอินเตอร์เฟสที่ให้มาคุณสามารถทำได้:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

หากคุณกำลังมองหาที่อยู่ IP สาธารณะของช่องคุณสามารถใช้สิ่งต่อไปนี้:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

คุณสามารถใช้dig(1)ตัวเลือกเช่น-4หรือ-6เพื่อค้นหาที่อยู่ IPv4 หรือ IPv6 โดยเฉพาะ Google จะให้คำตอบในรูปแบบบันทึกTXTซึ่งจะมีเครื่องหมายคำพูดล้อมรอบเมื่อแสดงโดยdig; ถ้าคุณต้องการใช้ตัวแปรด้วยยูทิลิตี้เช่นtracerouteคุณต้องใช้สิ่งที่ชอบtr (1)เพื่อลบเครื่องหมายคำพูด

ตัวเลือกอื่น ๆ รวมถึงwhoami.akamai.netและmyip.opendns.com, คำตอบAและAAAAบันทึกซึ่ง (แทนที่จะTXTเป็นในตัวอย่างข้างต้นจาก Google) ดังนั้นจึงไม่จำเป็นต้องลบเครื่องหมายคำพูด:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

นี่เป็นสคริปต์ตัวอย่างที่ใช้ตัวเลือกทั้งหมดด้านบนเพื่อตั้งค่าตัวแปร:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

หากคุณกำลังมองหาที่อยู่ IP ส่วนตัวหรือชุดของที่อยู่ IP ทั้งหมดที่กำหนดให้กับกล่องคุณสามารถใช้การรวมกันของifconfig(บน BSD และ GNU / Linux), ip addr(บน GNU / Linux), hostname(ตัวเลือก-iและ-Iบน GNU / Linux) และnetstatดูว่าเกิดอะไรขึ้น

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