ฉันจะหาที่อยู่ IP ภายในของฉันได้อย่างไร


208

ฉันติดตั้งเซิร์ฟเวอร์ Ubuntu 12.04 แล้วดังนั้นฉันไม่มี GUI เมื่อฉันทำคำสั่ง ifconfig ฉันไม่พบที่อยู่ ip ของ internl ของฉัน มันบอกว่า inet addr: 127.0.0.1

นี่คือผลลัพธ์ของifconfig -a:

eth0   link encap:Ethernet  HWaddr 00:06:4f:4a:66:f0
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1   link encap:Ethernet  HWaddr 00:16:ec:05:c8:9c 
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo     Link encap:Local Loopback
    inet addr 127.0.0.1  Mask:255.0.0.0
    inet6 addr:  ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536  Metric:1
    RX packets:1800 errors:0 dropped:0 overruns:0 frame:0
    Tx packets:1800 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:143896 (143.b KB)  TX bytes:143896 (143.8 KB)

นี่คือเนื้อหาของ etc / network / interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

หากใครบางคนสามารถแก้ไขได้สำหรับฉันเนื้อหาของ etc / network / interfaces ควรอยู่ในบรรทัดที่แยกออกจากกัน

ผลลัพธ์ของโฮสต์ askubuntu.com คือ:

;; connection timed out; no servers could be reached.

ฉันตั้งค่าเองคลาวด์และ webmin ไม่กี่เดือนที่ผ่านมาและใช้พวกเขาเป็นเวลาหนึ่งเดือนโดยไม่มีปัญหา ฉันคิดว่าไฟฟ้าดับไปหนึ่งวัน 2 เดือนที่ผ่านมาและฉันไม่เคยเปิดเซิร์ฟเวอร์อีกเลยจนกระทั่งเมื่อวานนี้ ฉันยังไม่ได้ทำอะไรเลยที่จะส่งผลกระทบต่อการตั้งค่าอินเทอร์เน็ตดังนั้นฉันไม่แน่ใจว่าทำไมมันไม่ทำงานอีกต่อไป เท่าที่โครงสร้างเครือข่ายของฉันไปฉันมีการ์ดเครือข่าย pci-e สำหรับพีซี สายอีเธอร์เน็ตเปลี่ยนจากการ์ดเครือข่ายไปเป็นสวิตช์จากนั้นเปลี่ยนเป็นโมเด็ม / เราเตอร์


1
@AvatarParto สำหรับอินเทอร์เฟซที่กำลังเข้าถึงสาธารณะคำถามนี้เกี่ยวกับเครือข่ายภายใน ...
Bruno Pereira

จากความอยากรู้สิ่งที่/etc/network/interfacesมีอยู่ในนั้น?
Powerlord

ฉันรู้วิธีการใช้คำสั่งเปลี่ยนแปลงไดเรกทอรี แต่ฉันไม่ทราบวิธีการแสดงรายการไฟล์เมื่อมีฉันจะทำอย่างไร
Cam Jones

lsจะแสดงรายการไฟล์ในไดเรกทอรี ls -lจะให้รายชื่อโดยละเอียด ในการแสดงรายการเนื้อหาของไดเรกทอรีหนึ่งls -l /etc/networkcd /etc/network ;ls -lในการเปลี่ยนลงในไดเรกทอรีและเนื้อหาของรายการ หากต้องการอ่านเนื้อหาของ(นี้เป็นไฟล์)etc/network/interfaces sudo pico /etc/network/interfaces( picoเป็นโปรแกรมแก้ไขข้อความที่มีน้ำหนักเบา - ดีสำหรับการอ่านและการแก้ไขขั้นพื้นฐานและข่มขู่น้อยกว่าvi)
douggro

คำตอบ:


205

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

ip add

หรือ

ifconfig -a

ถ้าอย่างที่คุณบอกว่ามันให้คุณ 127.0.0.1 เท่านั้นมีสองตัวเลือก

  1. การ์ดเครือข่ายของคุณไม่ได้ต่ออยู่หรือระบบไม่รู้จัก

  2. เซิร์ฟเวอร์ DHCP เครือข่ายของคุณไม่ทำงานหรือไม่ได้เชื่อมต่อ


เมื่อฉันลงชื่อเข้าใช้จะบอกฉันว่ามีการอัปเกรดหรืออัปเดตเล็กน้อยดังนั้นฉันคิดว่ามันต้องพูดคุยกับเว็บไซต์อูบุนตูอย่างเป็นทางการเพื่อรับทราบว่ามีการอัปเดตดังนั้นฉันคิดว่าอินเทอร์เน็ตของฉันใช้งานได้
Cam Jones

@Skateguy ลองเปิด askubuntu.com และโปรดพิมพ์ ifconfig -a
kamil ทั้งหมด

ฉันไม่มี GUI ฉันกำลังจะพิมพ์มันออกมา
Cam Jones

1
ฉันจะตอบคำถามที่สองทางเลือกของคุณได้อย่างไร
Cam Jones

1
ฉันอยากจะแนะนำipตัวเลือกแรกแล้ว ( เลิกใช้ ) ifconfigหลังจากนั้น
Campa

212
hostname -I

สิ่งนี้จะให้ที่อยู่ IP ของคุณโดยไม่มีข้อมูลเพิ่มเติม


16
มันสมบูรณ์แบบ คำตอบที่ซับซ้อนมากเกินไป (แต่ไม่เลว) คำตอบ .. อันนี้เป็นเรื่องง่ายตาย
user1003916

3
คำตอบที่สมบูรณ์แบบ .. :)
john400

2
ตามหน้า man: `-I, - all-ip-addresses แสดงที่อยู่เครือข่ายทั้งหมดของโฮสต์ ตัวเลือกนี้จะระบุที่อยู่ที่กำหนดค่าทั้งหมดในอินเทอร์เฟซเครือข่ายทั้งหมด ส่วนต่อประสานวนรอบและที่อยู่ลิงค์ท้องถิ่นของ IPv6 จะถูกตัดออก "ดังนั้นสิ่งนี้จะให้ที่อยู่ IP ของคุณบนเครือข่ายที่คุณเชื่อมต่อ แต่ยัง IP ของเครื่องของคุณหากคุณใช้เป็นเซิร์ฟเวอร์อีเธอร์เน็ตหรือ lxd ในกรณีของฉันมันให้สองที่อยู่เพราะฉันมี lxd: 192.168.0.78 และ 10.0.3.1
Sergiy Kolodyazhnyy

6
อ๋อ ในกรณีของฉันมันเลวร้ายกว่า10.0.2.15 172.18.0.1 172.17.0.1 172.20.0.1 172.21.0.1 172.22.0.1 172.19.0.1เพราะฉันใช้คอนเทนเนอร์ Docker บางตัว)
อเล็กซ์

4
โหวตขึ้นเพราะโซลูชันอื่น ๆ ใช้งานไม่ได้เช่นในภาพ
ดิบ docker

185

นี่คือสิ่งที่ฉันแนะนำในปัจจุบัน:

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

ข้อดีของคำสั่งนั้นคือคุณไม่จำเป็นต้องรู้ว่าคุณใช้อินเตอร์เฟสใด (eth0? eth1 หรืออาจ wlan0?) คุณไม่จำเป็นต้องกรองที่อยู่ localhost หรือที่อยู่ Docker หรือช่องทาง VPN ฯลฯ และคุณจะได้รับที่อยู่ IP ที่ใช้สำหรับการเชื่อมต่ออินเทอร์เน็ตในเวลานั้นเสมอ (สำคัญเมื่อคุณเชื่อมต่อกับทั้งอีเธอร์เน็ตและ wifi หรือผ่าน VPN ฯลฯ )

สิ่งนี้จะทดสอบไม่เพียงว่าคุณมี IP ที่ถูกต้องที่กำหนดค่าในอินเทอร์เฟซบางตัว (เช่นเดียวกับการแยกวิเคราะห์ผลลัพธ์ของifconfig) แต่ยังว่าคุณมีตารางเส้นทางที่กำหนดค่าให้ใช้อย่างถูกต้อง

ผมพบว่าความคิดที่ว่าในคำตอบนี้ โดยCollin เดอร์สัน

ฉันใช้ในสคริปต์internalipในชุดสคริปต์ของฉันบน GitHubซึ่งคุณสามารถติดตั้งได้ด้วย:

wget https://rawgit.com/rsp/scripts/master/internalip
chmod a+x internalip

และใช้เป็น:

internalip

หรือ:

internalip TARGET

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

แต่ถ้าคุณรันด้วย IP อื่น:

internalip 127.2.3.4

จากนั้นคุณจะได้รับ:

127.0.0.1

เพราะนั่นคือที่อยู่ IP ของคุณที่จะใช้เชื่อมต่อกับ 127.2.3.4บนอินเทอร์เฟซวนรอบ มันจะมีประโยชน์เมื่อเป้าหมายของคุณอยู่บน LAN, VPN หรือเครือข่ายพิเศษอื่น ๆ ซึ่งในกรณีนี้ IP อื่น ๆ บางอย่างอาจใช้สำหรับการเชื่อมต่อมากกว่า IP เริ่มต้นสำหรับการเข้าถึงอินเทอร์เน็ต

IP ภายนอก

ในการตรวจสอบที่อยู่ IP ภายนอกของคุณ(เซิร์ฟเวอร์ที่อยู่บนอินเทอร์เน็ตจะเห็นเมื่อคุณเชื่อมต่อ - ซึ่งอาจแตกต่างจากที่อยู่ IP ภายในที่อธิบายไว้ที่นี่) ดูคำตอบนี้


1
นี่เป็นคำตอบที่ยอดเยี่ยมขอบคุณ! ช่วยฉันปวดหัวมาก! : D
user65165

นี่เป็นเคล็ดลับที่มีประโยชน์ แต่ OP ได้ถามเกี่ยวกับ IP ภายในดังนั้นฉันไม่ปลอดภัยที่จะคิดว่ามันสามารถส่งไปยัง 8.8.8.8 ได้
mc0e

@ mc0e จุดดี นั่นเป็นเหตุผลที่สคริปต์ของฉันใช้อาร์กิวเมนต์ที่เป็นตัวเลือกสำหรับ IP อื่น ๆ - 8.8.8.8เป็นเพียงค่าเริ่มต้น ในคำตอบของฉันฉันใช้127.2.3.4เป็นตัวอย่าง คุณสามารถใช้ IP บนอินทราเน็ตหรือ VPN ได้เช่นกัน ประเด็นก็คือว่าคุณไม่ได้มักจะมีคนหนึ่งที่อยู่ IP ภายใน แต่อยู่ที่แตกต่างกันไม่กี่ใช้สำหรับเป้าหมายที่แตกต่าง วิธีนี้คุณสามารถค้นหาสิ่งที่ใช้จริงสำหรับการเชื่อมต่อไปยังเป้าหมายที่กำหนด
rsp

1
เพียงแค่คุณรู้ว่าสิ่งนี้จะให้ IP ภายนอกบน Mac
OZZIE

19

ฉันคิดว่ามันควรค่าแก่การกล่าวถึงว่าการเรียกใช้ ifconfig พร้อมกับตัวเลือก - a จะแสดงอินเตอร์เฟสทั้งหมดไม่ว่าจะเป็นอินเตอร์เฟสที่มี IP ก็ตาม

ifconfig ที่ทำงานเพียงอย่างเดียวจะแสดงเฉพาะอินเตอร์เฟสที่กำหนด IP เท่านั้น

นี่เป็นเคล็ดลับที่ดีที่คุณสามารถใช้เพื่อแสดงเฉพาะ IP ที่ใช้ Perl

# ifconfig | perl -nle'/dr:(\S+)/ && print $1'
192.168.1.100
127.0.0.1

การ์ดเครือข่ายของคุณได้รับการยอมรับจากระบบว่าเหตุใดจึงแสดงขึ้นมาว่า eth0 และ eth1

นี่เป็นวิธีที่รวดเร็วในการกำหนด IP ให้กับอินเทอร์เฟซของคุณใช้ IP / Subnet ที่ถูกต้องตามนั้น

 ifconfig eth0 192.168.1.200/24 up 

จากนั้นเราต้องเพิ่มเส้นทางเริ่มต้น

route add default gw 192.168.1.1

ที่ดีที่สุด


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

นี่คือการกำหนด IP แบบคงที่สำหรับอินเทอร์เฟซเครือข่ายของคุณซึ่งหมายความว่าหากคุณอยู่หลังเราเตอร์ที่มีซับเน็ต 192.168.1.0/24 จากนั้นคุณสามารถ ping ip ex ได้ 192.168.1.200 และถ้าคุณไม่ได้รับการตอบสนองให้ไปที่หัวข้อและใช้ ifconfig interface_name IP_ADDRESS / MASK up gw เริ่มต้นของคุณจะต้องเพิ่มหลังจากกำหนด IP
user1007727

8

คำสั่งนี้จะแสดงที่อยู่ IP ทั้งหมดสำหรับอุปกรณ์เดียว:

dev=eth0
ip addr show $dev | awk '/inet/ {print $2}' | cut -d/ -f1

มันจะพิมพ์เอาต์พุตหนึ่งหรือสองบรรทัด อันแรกคือที่อยู่ inet / IPv4 และอีกอันหนึ่งคือ inet6 / IPv6 หากระบบของคุณได้รับการกำหนดค่าให้รองรับสิ่งนี้


6

ในกรณีที่ifconfigคำสั่งไม่แสดงที่อยู่ IP มีวิธีที่ง่ายและสะดวกในการค้นหาที่อยู่ IP ของเครื่อง Ubuntu ผ่าน GUI ทำตามขั้นตอนด้านล่าง:

คลิกที่ไอคอนเครือข่ายในพื้นที่แจ้งเตือนและคลิกที่ข้อมูลการเชื่อมต่อ ตัวเลือกไอคอนเครือข่าย

หน้าต่างนี้จะปรากฏขึ้นซึ่งมีข้อมูลบางอย่างรวมถึงที่อยู่ IP ข้อมูลที่อยู่ IP


1

มีจำนวนมากของคำตอบที่ดีที่นี่ให้เลือกแล้ว แต่ฉันคิดว่าฉันชี้ให้เห็นfacterซึ่งเป็นปกติ แต่ไม่จำเป็นต้องนำมาใช้กับหุ่นสำหรับการเก็บรวบรวมข้อเท็จจริงต่างๆเกี่ยวกับระบบ ประโยชน์หลักของ facter ก็คือว่ามันจะช่วยให้การส่งออกทำความสะอาดที่ดีที่ช่วยให้คุณประหยัดการจัดการทั้งหมดที่มีgrep, sed, awk, cut, perlฯลฯ มันจะไม่บอกคุณที่อินเตอร์เฟซที่คุณสนใจ แต่ถ้าคุณรู้ว่าแล้ว ต่อไปนี้จะช่วยให้คุณ IP โดยไม่ต้อง cruft อื่น ๆ เพื่อทำความสะอาด:

facter ipaddress_eth0 

1

คำสั่ง ip

นี่เป็นรูปแบบที่หลากหลายip addrวิธี

ipมี-oตัวเลือกซึ่งจะช่วยให้การใส่ข้อมูลทั้งหมดในบรรทัดเดียว - นี้จะเป็นประโยชน์สำหรับการแยกด้วยเครื่องมือเช่นหรือawk perlเมื่อใช้ร่วมกับ-4ตัวเลือกเราจะเห็นที่อยู่ IPv4 เท่านั้น ดังนั้นเอาต์พุตจะเป็นดังนี้ (หมายเหตุ - แทนที่ wlan7 ด้วยอินเตอร์เฟสที่คุณต้องการตรวจสอบ):

$ ip -4 -o addr show wlan7
3: wlan7    inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic wlan7\       valid_lft 85654sec preferred_lft 85654sec

อย่างที่คุณเห็น IP address คือคอลัมน์ที่ 4 / คำในเอาท์พุท ส่วนที่เหลือคือการแยกวิเคราะห์แบบฝึกหัดง่ายๆผ่านเครื่องมือที่คุณเลือก ที่นี่ฉันใช้งูหลาม:

ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 

สิ่งเดียวกันเฉพาะที่นี่สตริง<<<และทดแทนคำสั่ง$()

python -c "import sys;print sys.stdin.readlines()[0].split()[3]"  <<< $(ip -4 -o addr show wlan7)

โดยส่วนตัวแล้วฉันบันทึกสิ่งนี้ไว้เป็นฟังก์ชั่นที่ดีในการ~/.bashrcพิมพ์น้อยลง

wlan_ip() {
    ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 
} 

รุ่นของ Perl และ Ruby สั้นกว่าเล็กน้อย:

$ ip -4 -o addr show  wlan7 | perl -lane 'print $F[3]'                         
192.168.0.78/24

$ ip  -4 -o addr show wlan7 | ruby -n -e 'print $_.split()[3]'                 
192.168.0.78/24

Wireshark

หากคุณคุ้นเคยกับการใช้เครื่องมือวิเคราะห์เครือข่ายคุณอาจรู้ว่าการรับที่อยู่ IP ของคุณสิ่งที่คุณต้องทำคือล้างแคชของเบราว์เซอร์เริ่มการจับภาพ Wireshark บนอินเทอร์เฟซเฉพาะและค้นหาGETแพ็กเก็ตhttp ที่กำลังส่ง คอลัมน์ปลายทางจะแสดงที่อยู่ IP ของคุณ

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