IP Adresimi komut satırından nasıl bulabilirim?


159

Yapabileceğini biliyorum ifconfig | grep inet, ama bu sana birkaç IPv4 adresi gösteriyor. SSHing ve diğerleri için spesifik olanı nasıl edinebilirim?


Aradığın şey Mac IP adresiniz değil, ISS'nizin yönlendiricinizin İnternet arayüzüne atfedilen genel IP adresidir.
dan

Yanıtlar:


168

ipconfig getifaddr en1Kablosuz veya ipconfig getifaddr en0ethernet için kullanın .

Güncelleme :

ipconfig getifaddr en0 wifi arayüzü için varsayılandır.


7
Bu, harici IP adresini değil, dahili (yönlendiricime) IP adresini (örn. 192.168.1.xxx) gösterir. (Aşağıdaki diğer cevapların çoğunda olduğu gibi.)
ShreevatsaR

2
Benim için işe yaramadı :(
Naveed Abbas

2
ifconfigtüm arayüzleri ve IP'lerini gösterir
aralar

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

30
Yıllardır değişti, 'ipconfig getifaddr en0' wifi arayüzü için varsayılandır
Marek Szmalc

98

Aşağıdakiler 10.8 ve 10.10 Yosemite'de benim için çalışıyor.

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

Yukarıdakilerin birden fazla cevap verdiğini tespit ederseniz, aşağıdakileri bir komut dosyasına kaydedin ve bunun yerine çalıştırı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
Herhangi bir kablolu ve kablosuz özellik gerektirmediğinden bence kabul edilen cevap bu olmalıdır.
Erik Nomitch,

Bunun dışında @ErikNomitch bu cevap beni 2 verir
Zach Lysobey

Ah, sonra geri çekiliyorum. @ZachLysobey
Erik Nomitch

Bu en iyi genel yaklaşımdır ancak doğru cevabı alabilmek için, bazen awk öncesi biraz daha huzursuzluk yapmak gerekir ve doğru cevap değişebilir.
uchuugaka

Umarım bu sorunu çözmesi gereken bir senaryo ekledim .. fyi!
Brad Parks

43

Sadece curl ifconfig.meterminali yazınız.


1
Neden aşağı oy? Dışarıdan bir IP olmasına rağmen, komut geçerlidir ve ssh girişlerim için çalışıyor.
Kuzen Kokain

5
Bu halka açık IP adresi ve aradığım şey. ipconfig getifaddr en0yerel IP içindir.
abriggs

HighSierra'da bunu SUDO olarak çalıştırmak zorunda kaldım. Bunun yanı sıra harici IP adresini listeler. Dahili IP adresi için Brad Parks'ın cevabına bakınız
Vincent

19

Bu sık ip arama için bir .aliases dotfile kurmak var:

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

17

Aşağıdakileri yapabilirsiniz:

Yazın ifconfigya ifconfig -a. Bu komut size IP ve MAC adresleriyle birlikte arabirimlerin listesini gösterir (yalnızca sonuncusu). Ayrıca sadece belirli bir arayüzün konfigürasyonunu da yazabilir ifconfig en0veya yazabilirsiniz ifconfig en1(birisinin cevaplarında söylediği gibi, en0 tipik olarak kablolu Ethernet'tir, en1 ise WiFi arayüzüdür).

Alternatif olarak, netstat -itüm arayüzleri listeleyecek ve size her birine atadığınız IP adreslerini gösterecektir.

Tipik olarak, bir kutu üzerinde çalışan SSH cini olduğunda, mevcut tüm arayüzleri dinler, yani. Makinenize SSH aracılığıyla bağlanmak için yapılandırılmış olan herhangi bir IP adresini kullanabilirsiniz (bu, Açıkçası, Güvenlik Duvarı kurallarına tabidir). İşletim sisteminin Bir Birincil arayüzü ve birincil IP adresini çağırdığı şeyin peşindeyseniz, aşağıdaki scutilkomutu kullanabilirsiniz :

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

Lütfen, yukarıdakilerin bir komut satırı komutu olmasına rağmen, etkileşimli olduğunu da unutmayın (bu nedenle koşun scutilve sonra kendi komutlarını girin). İlk showkomut, işletim sistemi için birincil arabirimin adını (yani, Sistem Yönlendirmeler / Ağ Tercihleri ​​pencerenizdeki listenin üstünde olacak) ve varsayılan yönlendiricinizin IP adresini söyler. İkinci showkomut State:/Network/Interface/<ifname>/IPv4argüman alır (bu durumda en0) ve size atanan IP adreslerini verir. Adresler dizisindeki adresi arıyorsanız, diğer iki giriş yayın adresleri ve ağ maskeleridir.

Bu yardımcı olur umarım, ama bir şey açık değilse, bana bildirin.


1
Bu cevap için teşekkürler. IP’yi birincil arabiriminize 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})"
ulaştırmak

4

Bilgisayarınızın IP adresini Internet’e dönük olarak almak için, çalışan bir makbuz:

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

Aktif olan çoklu arayüzleriniz olsa bile, hangisinin varsayılan ağ geçidi olduğunu bilmiyorsanız bile arayüzleriniz olsa bile çalışmalıdır.


Bu, dahili ağ IP adresini alır (örn: 192.168.0.*)internete maruz kalan harici adresi değil.
SimplGy

Bu geri bildirim için teşekkür ederiz. İşletim sisteminin hangi sürümü olduğunuzu söyleyebilir misiniz? Bana çıktısını verebilir misiniz netstat -nr | grep default?
dan

Bu, gelen / giden trafiğe hizmet veren arayüzün IP'sini alır. NAT'ın arkasındaysanız, LAN adresinizi WAN adresi değil verir. Ancak birçok amaç için yararlı olabilir ve ağa ulaşamaz.
folex

1

Sadece kayıt için, harici IP adresinizi veren aşağıdaki içerikle bir bash betiği yapabilirsiniz

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

3
Varsayılan wgetolarak macOS'un bir parçası değildir ve Apple dışı bir kaynaktan yüklenmelidir.
user3439894

Soru macOS spesifik mi? varsayılan olarak birçok linux dağıtımına kuruludur.
user702846

Bu site Apple donanımı ve yazılımı hakkındadır, bu nedenle macOS ve iOS varsayılmaktadır.
grg

Bunun için varsayılan macOS komutu curl kullanarak olacaktır:curl -s http://ipecho.net/plain; echo
thibmaek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.