Làm cách nào để tìm Địa chỉ IP của tôi từ dòng lệnh?


159

Tôi biết bạn có thể làm ifconfig | grep inet, nhưng điều đó cho bạn thấy một số địa chỉ IPv4. Làm cách nào để có được cái cụ thể cho SSHing et al?


Thứ bạn đang tìm kiếm không phải là địa chỉ IP Mac mà là địa chỉ IP công cộng mà ISP của bạn quy cho giao diện Internet của bộ định tuyến.
dan

Câu trả lời:


168

Sử dụng ipconfig getifaddr en1cho không dây, hoặc ipconfig getifaddr en0cho ethernet.

Cập nhật :

ipconfig getifaddr en0 được mặc định cho giao diện wifi.


7
Điều này cho thấy địa chỉ IP nội bộ (với bộ định tuyến của tôi) (ví dụ 192.168.1.xxx), chứ không phải địa chỉ IP bên ngoài. (Cũng như hầu hết các câu trả lời khác bên dưới.)
ShreevatsaR

2
Không làm việc cho tôi :(
Naveed Abbas

2
ifconfighiển thị tất cả các giao diện và IP của chúng
aralar

4
echo IP bên ngoài:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb

30
Nó đã thay đổi trong nhiều năm, 'ipconfig getifaddr en0' được mặc định cho giao diện wifi
Marek Szmalc

98

Sau đây làm việc cho tôi vào ngày 10.8 và ngày 10.10 Yosemite.

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

Nếu bạn thấy những điều trên cung cấp cho bạn nhiều hơn một câu trả lời, hãy lưu câu trả lời sau vào tập lệnh và thay vào đó hãy chạy nó

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
Câu trả lời nên được chấp nhận theo ý kiến ​​của tôi vì nó không yêu cầu bất kỳ đặc điểm kỹ thuật có dây so với không dây.
Erik Nomitch

@ErikNomitch ngoại trừ nó cho tôi 2 câu trả lời này
Zach Lysobey

À, tôi rút lại rồi. @ZachLysobey
Erik Nomitch

Đây là cách tiếp cận tổng thể tốt nhất nhưng đôi khi người ta cần phải thực hiện thêm một chút grepping trước khi awk để có câu trả lời đúng và câu trả lời đúng có thể khác nhau.
uchuugaka

Tôi đã thêm một kịch bản hy vọng sẽ giải quyết vấn đề này .. fyi!
Brad

43

Chỉ cần gõ curl ifconfig.mevào thiết bị đầu cuối.


1
Tại sao các downvote? Mặc dù nó là một IP bên ngoài, lệnh này hợp lệ và hoạt động cho thông tin đăng nhập ssh của tôi.
CousinCocaine

5
Đây là địa chỉ IP công cộng và những gì tôi đang tìm kiếm. ipconfig getifaddr en0dành cho IP cục bộ.
abriggs

Trên HighSierra tôi phải chạy cái này với tên SUDO. Bên cạnh đó liệt kê địa chỉ IP bên ngoài. Để biết địa chỉ IP nội bộ, hãy xem câu trả lời từ Brad park
Vincent

19

Tôi đã thiết lập điều này trong một dotfile .aliases để tìm kiếm ip thường xuyên:

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

17

Bạn có thể làm như sau:

Loại ifconfighoặc ifconfig -a. Lệnh này hiển thị cho bạn danh sách các giao diện cùng với địa chỉ IP và MAC của chúng (chỉ giao diện sau nếu có). Bạn cũng có thể chỉ nhập ifconfig en0hoặc ifconfig en1cấu hình của một giao diện cụ thể (như ai đó đã nói trong câu trả lời của họ, en0 thường là Ethernet có dây trong khi en1 là giao diện WiFi).

Thay vào đó, netstat -isẽ liệt kê tất cả các giao diện và sẽ hiển thị cho bạn các địa chỉ IP bạn đã gán cho từng giao diện đó.

Thông thường, khi bạn có SSH daemon chạy trên một hộp, nó sẽ lắng nghe trên tất cả các giao diện có sẵn, tức là. bạn có thể sử dụng bất kỳ địa chỉ IP nào được cấu hình trên máy của mình để kết nối với máy đó thông qua SSH (điều này, rõ ràng, tuân theo các quy tắc Tường lửa). Nếu bạn theo sau những gì HĐH gọi là giao diện Chính và địa chỉ IP chính, bạn có thể sử dụng scutillệnh như sau:

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
  }
}

Xin lưu ý rằng, ở trên, mặc dù là một dòng lệnh, cũng tương tác (vì vậy bạn chạy scutilvà sau đó nhập các lệnh của riêng nó vào nó). Lệnh đầu tiên showcho bạn biết tên của giao diện chính cho HĐH (tức là đây sẽ là giao diện đứng đầu danh sách trong cửa sổ Tùy chọn hệ thống / Tùy chọn mạng của bạn), cũng như địa chỉ IP của bộ định tuyến mặc định của bạn. Lệnh thứ hai showlấy State:/Network/Interface/<ifname>/IPv4đối số (trong trường hợp này en0) và cung cấp cho bạn các địa chỉ IP được gán cho nó. Bạn đang tìm địa chỉ trong mảng Địa chỉ, hai mục còn lại là địa chỉ quảng bá và netmasks.

Hy vọng rằng sẽ giúp, nhưng nếu bất cứ điều gì không rõ ràng, cho tôi biết.


1
Cảm ơn câu trả lời này. Tôi đã viết một tập lệnh nhanh để lấy IP giao diện chính của bạn: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

Để lấy địa chỉ IP của máy tính của bạn đối diện với Internet, đây là một biên nhận làm việc:

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

Nó sẽ hoạt động ngay cả khi bạn có nhiều giao diện hoạt động, ngay cả khi bạn có giao diện mà bạn không biết cái nào thực sự là cổng mặc định.


Điều này nhận được địa chỉ IP mạng nội bộ (ví dụ 192.168.0.*)
:,

Cảm ơn bạn đã phản hồi này. Bạn có thể cho tôi biết bạn là phiên bản nào của HĐH không? Bạn có thể cung cấp cho tôi đầu ra của netstat -nr | grep default?
dan

Điều này nhận được IP của giao diện phục vụ lưu lượng vào / ra. Nếu bạn đứng sau NAT, điều đó sẽ cung cấp địa chỉ LAN của bạn chứ không phải địa chỉ WAN. Nhưng nó có thể hữu ích cho nhiều mục đích và nó không tiếp cận được với mạng.
folex

1

Chỉ để ghi lại, bạn có thể tạo một tập lệnh bash với nội dung sau cung cấp cho bạn địa chỉ IP bên ngoài của bạn

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

3
Theo mặc định, wgetđây không phải là một phần của macOS và cần được cài đặt từ nguồn không phải của Apple.
dùng3439894

Là câu hỏi macOS cụ thể? Theo mặc định, nó được cài đặt trên nhiều bản phân phối linux.
dùng702846

Trang web này nói về phần cứng và phần mềm của Apple, vì vậy macOS và iOS được cho là.
grg

Lệnh macOS mặc định cho việc này sẽ bằng cách sử dụng curl:curl -s http://ipecho.net/plain; echo
thibmaek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.