ฉันจะค้นหาที่อยู่ IP ของฉันจากบรรทัดคำสั่งได้อย่างไร


159

ฉันรู้ว่าคุณสามารถทำได้ifconfig | grep inetแต่นั่นแสดงให้คุณเห็นที่อยู่ IPv4 หลายแห่ง ฉันจะได้รับเฉพาะสำหรับ SSHing และคณะได้อย่างไร


สิ่งที่คุณกำลังมองหาไม่ใช่ที่อยู่ IP Mac ของคุณ แต่ที่อยู่ IP สาธารณะของคุณ ISP ของคุณมาจากอินเทอร์เฟซอินเทอร์เน็ตของเราเตอร์ของคุณ
แดน

คำตอบ:


168

ใช้ipconfig getifaddr en1สำหรับไร้สายหรือipconfig getifaddr en0สำหรับอีเธอร์เน็ต

อัปเดต :

ipconfig getifaddr en0 เป็นค่าเริ่มต้นสำหรับอินเตอร์เฟส wifi


7
นี่แสดงที่อยู่ IP ภายในของฉัน (ต่อเราเตอร์ของฉัน) (เช่น 192.168.1.xxx) ไม่ใช่ที่อยู่ IP ภายนอก (เช่นเดียวกับคำตอบอื่น ๆ ส่วนใหญ่ด้านล่าง)
ShreevatsaR

2
ใช้งานไม่ได้สำหรับฉัน :(
อับบาส Naveed

2
ifconfigแสดงอินเทอร์เฟซและ IP ทั้งหมดของพวกเขา
aralar

4
echo External IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb

30
มันมีการเปลี่ยนแปลงมานานหลายปี 'ipconfig getifaddr en0' เป็นค่าเริ่มต้นสำหรับการเชื่อมต่ออินเตอร์เน็ตไร้สาย
มาเร็ค Szmalc

98

ผลงานต่อไปนี้สำหรับฉันใน 10.8 และ 10.10 โยเซมิตี

ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' 

หากคุณพบว่าข้างต้นให้คำตอบมากกว่าหนึ่งคำให้บันทึกสิ่งต่อไปนี้ในสคริปต์แล้วเรียกใช้แทน

ip_address.sh

#!/usr/bin/env bash

dumpIpForInterface()
{
  IT=$(ifconfig "$1") 
  if [[ "$IT" != *"status: active"* ]]; then
    return
  fi
  if [[ "$IT" != *" broadcast "* ]]; then
    return
  fi
  echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}

main()
{
  # snagged from here: https://superuser.com/a/627581/38941
  DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
  if [ -n "$DEFAULT_ROUTE" ]; then
    dumpIpForInterface "$DEFAULT_ROUTE"
  else
    for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
    do 
      if [[ $i != *"vboxnet"* ]]; then
        dumpIpForInterface "$i"
      fi
    done
  fi
}

main

3
ควรเป็นคำตอบที่ยอมรับในความคิดของฉันเพราะมันไม่จำเป็นต้องมีข้อกำหนดเกี่ยวกับสายและไร้สายใด ๆ
Erik Nomitch

@ErikNomitch ยกเว้นจะให้ 2 กับคำตอบนี้
Zach Lysobey

อ๊ะฉันถอยกลับแล้ว @ZachLysobey
Erik Nomitch

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

ฉันเพิ่มสคริปต์ที่หวังว่าควรจะแก้ไขปัญหานี้ .. fyi!
Brad Parks

43

เพียงแค่พิมพ์curl ifconfig.meเทอร์มินัล


1
ทำไมต้องลงคะแนน แม้ว่าจะเป็น IP ภายนอกคำสั่งนั้นใช้ได้และใช้ได้สำหรับการเข้าสู่ระบบของฉัน
CousinCocaine

5
นี่คือที่อยู่ IP สาธารณะและสิ่งที่ฉันกำลังมองหา ipconfig getifaddr en0สำหรับ IP ท้องถิ่น
abriggs

บน HighSierra ฉันต้องใช้มันเป็น SUDO นอกจากนี้จะแสดงรายการที่อยู่ IP ภายนอก สำหรับที่อยู่ IP ภายในดูคำตอบจากแบรดพาร์ค
วินเซนต์

19

ฉันได้ตั้งค่านี้ใน. aliases dotfile สำหรับการค้นหา ip บ่อยครั้ง:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"

17

คุณสามารถทำสิ่งต่อไปนี้:

ประเภทหรือifconfig ifconfig -aคำสั่งนี้จะแสดงรายการอินเตอร์เฟสพร้อมกับที่อยู่ IP และ MAC ของพวกเขา (อันหลังนั้นใช้ได้เฉพาะ) คุณสามารถพิมพ์ifconfig en0หรือifconfig en1สำหรับการกำหนดค่าของอินเทอร์เฟซเฉพาะเท่านั้น (ตามที่มีคนพูดในคำตอบของพวกเขาโดยทั่วไป en0 จะเป็นอีเธอร์เน็ตแบบผ่านสายขณะที่ en1 เป็นอินเทอร์เฟซ WiFi)

อีกทางเลือกหนึ่งคือnetstat -iจะแสดงรายการอินเทอร์เฟซทั้งหมดและจะแสดงที่อยู่ IP ที่คุณกำหนดให้แต่ละรายการ

โดยทั่วไปเมื่อคุณมี SSH daemon ทำงานอยู่ในกล่องมันจะฟังในอินเตอร์เฟสที่มีอยู่ทั้งหมดเช่น คุณสามารถใช้ที่อยู่ IP ใด ๆ ที่กำหนดค่าไว้ในเครื่องของคุณเพื่อเชื่อมต่อกับเครื่องนั้นผ่าน SSH (สิ่งนี้เห็นได้ชัดว่าเป็นไปตามกฎไฟร์วอลล์) หากคุณใช้ระบบปฏิบัติการที่เรียกว่าส่วนติดต่อหลักและที่อยู่ IP หลักคุณสามารถใช้scutilคำสั่งดังนี้:

MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
  PrimaryInterface : en0
  PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
  Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
  Addresses : <array> {
    0 : 10.103.4.234
  }
  BroadcastAddresses : <array> {
    0 : 10.103.4.255
  }
  SubnetMasks : <array> {
    0 : 255.255.255.0
  }
}

โปรดทราบว่าข้างต้นแม้ว่าจะเป็นคำสั่งบรรทัดคำสั่งก็เป็นแบบโต้ตอบ (ดังนั้นคุณเรียกใช้scutilแล้วป้อนคำสั่งของตัวเองลงไป) showคำสั่งแรกจะบอกชื่อของอินเทอร์เฟซหลักสำหรับระบบปฏิบัติการ (เช่นนี้จะเป็นชื่อที่อยู่ด้านบนของรายการในหน้าต่างการตั้งค่าระบบ / การตั้งค่าเครือข่าย) รวมถึงที่อยู่ IP ของเราเตอร์เริ่มต้นของคุณ showคำสั่งที่สองรับState:/Network/Interface/<ifname>/IPv4อาร์กิวเมนต์ (ในกรณีนี้en0) และให้ที่อยู่ IP ที่กำหนดให้คุณ คุณกำลังมองหาที่อยู่ในอาร์เรย์ที่อยู่อีกสองรายการคือที่อยู่ออกอากาศและ netmasks

หวังว่าจะช่วยได้ แต่ถ้ามีอะไรไม่ชัดเจนแจ้งให้เราทราบ


1
ขอบคุณสำหรับคำตอบนี้ ฉันเขียนสคริปต์สั้น ๆ เพื่อรับ IP ส่วนติดต่อหลักของคุณ:echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
DC_

4

หากต้องการรับที่อยู่ IP ของคอมพิวเตอร์ของคุณที่เชื่อมต่อกับอินเทอร์เน็ตนี่คือใบเสร็จรับเงินที่ใช้งานได้:

if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'

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


นี่จะได้รับที่อยู่ IP ของเครือข่ายภายใน (เช่น: 192.168.0.*)ไม่ใช่ที่อยู่ภายนอกที่เปิดเผยต่ออินเทอร์เน็ต
SimplGy

ขอบคุณสำหรับคำติชมนี้ คุณบอกฉันเกี่ยวกับ OS เวอร์ชันใดได้บ้าง คุณสามารถให้ฉันส่งออกของnetstat -nr | grep default?
แดน

นี่จะได้รับ IP ของอินเทอร์เฟซที่ให้บริการปริมาณข้อมูลเข้า / ออก หากคุณอยู่หลัง NAT จะให้ที่อยู่ LAN ของคุณไม่ใช่ที่อยู่ WAN แต่มันจะมีประโยชน์สำหรับจุดประสงค์มากมายและมันไม่สามารถเข้าถึงเครือข่ายได้
folex

1

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

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo

3
โดยค่าเริ่มต้นwgetไม่ใช่ส่วนหนึ่งของ macOS และจำเป็นต้องติดตั้งจากแหล่งที่ไม่ใช่ของ Apple
user3439894

คำถาม macOS เฉพาะหรือไม่ มันเป็นค่าเริ่มต้นติดตั้งในการกระจายลินุกซ์จำนวนมาก
user702846

ไซต์นี้เกี่ยวกับฮาร์ดแวร์และซอฟต์แวร์ของ Apple ดังนั้นจึงคาดว่าจะมี macOS และ iOS
grg

คำสั่ง macOS เริ่มต้นสำหรับสิ่งนี้จะโดยใช้ curl:curl -s http://ipecho.net/plain; echo
thibmaek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.