Bagaimana cara menemukan alamat IP saya dari baris perintah?

159

Saya tahu Anda bisa melakukannya ifconfig | grep inet, tetapi itu menunjukkan Anda beberapa alamat IPv4. Bagaimana cara mendapatkan yang spesifik untuk SSHing et al?

Ya ampun
sumber
Apa yang Anda cari bukanlah alamat IP Mac Anda, tetapi alamat IP publik yang dikaitkan ISP Anda dengan antarmuka Internet router Anda.
dan

Jawaban:

168

Gunakan ipconfig getifaddr en1untuk nirkabel, atau ipconfig getifaddr en0untuk ethernet.

Perbarui :

ipconfig getifaddr en0 default untuk antarmuka wifi.

daviesgeek
sumber
7
Ini menunjukkan alamat IP internal saya (ke router saya) (mis. 192.168.1.xxx), bukan alamat IP eksternal. (Seperti halnya sebagian besar jawaban lain di bawah ini.)
ShreevatsaR
2
Tidak bekerja untuk saya :(
Naveed Abbas
2
ifconfigmenunjukkan semua antarmuka dan IP mereka
aralar
4
echo External IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb
30
Ini telah berubah selama bertahun-tahun, 'ipconfig getifaddr en0' adalah default untuk antarmuka wifi
Marek Szmalc
98

Berikut ini berfungsi untuk saya pada 10,8 dan pada 10,10 Yosemite.

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

Jika Anda menemukan jawaban di atas memberi Anda lebih dari satu, simpan yang berikut ke skrip, dan jalankan sebagai gantinya

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
Taman Brad
sumber
3
Seharusnya jawaban yang diterima menurut saya karena tidak memerlukan spesifikasi kabel vs nirkabel.
Erik Nomitch
@ErikNomitch kecuali itu memberi saya 2 dengan jawaban ini
Zach Lysobey
Ah, kalau begitu aku menarik kembali. @ZachLysobey
Erik Nomitch
ini adalah pendekatan keseluruhan yang terbaik tetapi kadang-kadang seseorang perlu melakukan sedikit lebih banyak grepping sebelum awk untuk mendapatkan jawaban yang benar dan jawaban yang tepat mungkin berbeda.
uchuugaka
Saya menambahkan skrip yang semoga mengatasi masalah ini .. fyi!
Brad Parks
43

Cukup ketikkan curl ifconfig.meterminal.

Kcidkcus
sumber
1
Mengapa downvote? Meskipun ini IP luar, perintah ini valid dan berfungsi untuk login ssh saya.
SepupuCocaine
5
Ini adalah alamat IP publik dan apa yang saya cari. ipconfig getifaddr en0adalah untuk IP lokal.
abriggs
Di HighSierra saya harus menjalankan ini sebagai SUDO. Selain itu ini mencantumkan alamat IP eksternal. Untuk alamat IP internal, lihat jawaban dari Brad Parks
Vincent
19

Saya sudah menyiapkan ini dalam .aliases dotfile untuk pencarian ip yang sering:

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

Anda dapat melakukan hal berikut:

Ketik ifconfigatau ifconfig -a. Perintah ini menunjukkan kepada Anda daftar antarmuka beserta IP dan alamat MAC-nya (yang terakhir hanya jika berlaku). Anda juga dapat mengetik ifconfig en0atau ifconfig en1untuk konfigurasi antarmuka tertentu saja (seperti yang dikatakan seseorang dalam jawaban mereka, en0 biasanya Ethernet berkabel sedangkan en1 adalah antarmuka WiFi).

Sebagai alternatif, netstat -iakan mencantumkan semua antarmuka dan akan menunjukkan kepada Anda alamat IP yang telah Anda tetapkan untuk masing-masingnya.

Biasanya, ketika Anda memiliki daemon SSH yang berjalan pada sebuah kotak, ia akan mendengarkan pada semua antarmuka yang tersedia, yaitu. Anda dapat menggunakan alamat IP apa pun yang dikonfigurasi pada mesin Anda untuk terhubung ke mesin itu melalui SSH (ini, jelas, tunduk pada aturan Firewall). Jika Anda mengejar apa yang OS sebut dengan antarmuka Primer dan alamat IP primer, Anda dapat menggunakan scutilperintah seperti ini:

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

Harap dicatat, bahwa di atas, meskipun merupakan perintah baris perintah, juga interaktif (jadi Anda menjalankan scutildan kemudian memasukkan perintah sendiri ke dalamnya). showPerintah pertama memberi tahu Anda nama antarmuka utama untuk OS (yaitu ini akan menjadi yang di atas daftar di jendela System Preferences / Network Preferences Anda), serta alamat IP router default Anda. showPerintah kedua mengambil State:/Network/Interface/<ifname>/IPv4argumen (dalam hal ini, en0) dan memberi Anda alamat IP yang ditugaskan untuk itu. Anda sedang mencari alamat dalam array Alamat, dua entri lainnya adalah alamat broadcast dan netmask.

Semoga itu bisa membantu, tetapi jika ada yang tidak jelas, beri tahu saya.

mikrofon
sumber
1
Terima kasih atas jawaban ini. Saya menulis skrip cepat untuk mendapatkan IP antarmuka utama Anda: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

Untuk mendapatkan alamat IP komputer Anda yang menghadap Internet, berikut ini adalah resep yang berfungsi:

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

Ini harus bekerja bahkan ketika Anda memiliki beberapa antarmuka aktif, bahkan ketika Anda memiliki antarmuka Anda tidak tahu yang mana sebenarnya gateway default.

dan
sumber
Ini mendapatkan alamat IP jaringan internal (misalnya 192.168.0.*)
:,
Terima kasih atas umpan balik ini. Bisakah Anda memberi tahu saya versi OS mana Anda? Bisakah Anda memberi saya hasil netstat -nr | grep default?
dan
Ini mendapatkan IP dari antarmuka yang melayani lalu lintas in / outbound. Jika Anda berada di belakang NAT, itu akan memberikan alamat LAN Anda, bukan alamat WAN. Tapi itu bisa berguna untuk banyak tujuan, dan tidak menjangkau jaringan.
folex
1

Sebagai catatan, Anda dapat membuat skrip bash dengan konten berikut yang memberi Anda alamat IP eksternal Anda

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
pengguna702846
sumber
3
Secara default wgetbukan merupakan bagian dari macOS dan perlu diinstal dari sumber non-Apple.
user3439894
Apakah pertanyaannya macOS spesifik? secara default diinstal pada banyak distribusi linux.
user702846
Situs ini membahas tentang perangkat keras dan perangkat lunak Apple, sehingga macOS dan iOS dianggap.
grg
Perintah default macOS untuk ini adalah dengan menggunakan curl:curl -s http://ipecho.net/plain; echo
thibmaek