Jak znaleźć mój adres IP z wiersza poleceń?

159

Wiem, że możesz to zrobić ifconfig | grep inet, ale pokazuje kilka adresów IPv4. Jak uzyskać konkretny dla SSHing i in.?

JShoe
źródło
To, czego szukasz, to nie adres IP komputera Mac, ale publiczny adres IP przypisany przez ISP interfejsowi internetowemu routera.
dan

Odpowiedzi:

168

Użyj ipconfig getifaddr en1do połączenia bezprzewodowego lub ipconfig getifaddr en0Ethernet.

Aktualizacja :

ipconfig getifaddr en0 jest domyślny dla interfejsu Wi-Fi.

daviesgeek
źródło
7
Pokazuje mój wewnętrzny (do mojego routera) adres IP (np. 192.168.1.xxx), a nie zewnętrzny adres IP. (Podobnie jak większość innych odpowiedzi poniżej.)
ShreevatsaR
2
Nie działało dla mnie :(
Naveed Abbas
2
ifconfigpokazuje wszystkie interfejsy i ich adresy IP
aralar
4
echo Zewnętrzny adres IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb 16.08.16
30
Od lat się zmienia, „ipconfig getifaddr en0” jest domyślnym interfejsem Wi-Fi
Marek Szmalc
98

Poniższe działa dla mnie w wersji 10.8 i 10.10 Yosemite.

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

Jeśli powyższe informacje zawierają więcej niż jedną odpowiedź, zapisz następujące w skrypcie i uruchom je zamiast tego

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
Brad Parks
źródło
3
Moim zdaniem powinna to być odpowiedź zaakceptowana, ponieważ nie wymaga specyfikacji przewodowej vs. bezprzewodowej.
Erik Nomitch,
@ErikNomitch oprócz tego, że daje mi 2 z tą odpowiedzią
Zach Lysobey
Ach, więc wycofuję się. @ZachLysobey
Erik Nomitch
jest to najlepsze ogólne podejście, ale czasami trzeba zrobić trochę więcej grep zanim awk uzyska właściwą odpowiedź, a właściwa odpowiedź może się różnić.
uchuugaka,
Dodałem skrypt, który, mam nadzieję, powinien rozwiązać ten problem .. fyi!
Brad Parks
43

Po prostu wpisz curl ifconfig.meterminal.

Kcidkcus
źródło
1
Dlaczego głosowanie negatywne? Chociaż jest to zewnętrzny adres IP, polecenie jest prawidłowe i działa dla moich logowań ssh.
CousinCocaine
5
To jest publiczny adres IP i tego szukałem. ipconfig getifaddr en0dotyczy lokalnego adresu IP.
abriggs,
Na HighSierra musiałem uruchomić to jako SUDO. Poza tym zawiera listę zewnętrznego adresu IP. Wewnętrzny adres IP znajduje się w odpowiedzi od Brada Parks
Vincenta
19

Mam to ustawione w pliku kropkowym .aliases do częstego wyszukiwania adresów IP:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"
thibmaek
źródło
17

Możesz wykonać następujące czynności:

Wpisz ifconfiglub ifconfig -a. To polecenie wyświetla listę interfejsów wraz z ich adresami IP i MAC (ten ostatni tylko, jeśli dotyczy). Możesz także wpisać ifconfig en0lub tylko w ifconfig en1celu konfiguracji konkretnego interfejsu (jak ktoś powiedział w swoich odpowiedziach, en0 to zazwyczaj przewodowy Ethernet, podczas gdy en1 to interfejs WiFi).

Alternatywnie, netstat -iwyświetli listę wszystkich interfejsów i pokaże adresy IP, które przypisałeś każdemu z nich.

Zazwyczaj, gdy demon SSH działa na urządzeniu, nasłuchuje na wszystkich dostępnych interfejsach, tj. możesz użyć dowolnego adresu IP skonfigurowanego na twoim komputerze, aby połączyć się z tym komputerem przez SSH (oczywiście, z zastrzeżeniem reguł zapory ogniowej). Jeśli szukasz tego, co system operacyjny nazywa głównym interfejsem i podstawowym adresem IP, możesz użyć następującego scutilpolecenia:

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

Pamiętaj, że powyższe, mimo że jest to polecenie wiersza polecenia, jest również interaktywne (więc uruchamiasz, scutila następnie wpisujesz w nim własne polecenia). Pierwsze showpolecenie podaje nazwę podstawowego interfejsu systemu operacyjnego (tzn. Będzie to ten znajdujący się na górze listy w oknie Preferencji systemowych / Preferencji sieciowych), a także adres IP domyślnego routera. Drugie showpolecenie pobiera State:/Network/Interface/<ifname>/IPv4argument (w tym przypadku en0) i podaje adresy IP przypisane do niego. Szukasz adresu w tablicy Adresy, pozostałe dwa wpisy to adresy rozgłoszeniowe i maski sieciowe.

Mam nadzieję, że to pomaga, ale jeśli coś nie jest jasne, daj mi znać.

mikrofon
źródło
1
Dziękuję za tę odpowiedź. Napisałem szybki skrypt, aby uzyskać adres IP twoim podstawowym interfejsem: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_14.01.15
4

Aby uzyskać adres IP komputera z dostępem do Internetu, oto działający przepis:

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

Powinno działać nawet wtedy, gdy masz aktywnych wiele interfejsów, nawet jeśli masz interfejsy, nie wiesz, który z nich jest domyślną bramą.

Dan
źródło
Uzyskuje to adres IP sieci wewnętrznej (np .: 192.168.0.*)nie zewnętrzny, widoczny w Internecie.
SimplGy
Dziękuję za tę opinię. Czy możesz mi powiedzieć, na jakiej wersji systemu operacyjnego jesteś? Czy możesz podać mi wynik netstat -nr | grep default?
dan
Pobiera adres IP interfejsu obsługującego ruch przychodzący / wychodzący. Jeśli jesteś za NAT, to poda twój adres LAN, a nie adres WAN. Ale może być przydatny do wielu celów i nie dociera do sieci.
folex
1

Dla przypomnienia możesz stworzyć skrypt bash z następującą zawartością, która da ci twój zewnętrzny adres IP

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
użytkownik702846
źródło
3
Domyślnie wgetnie jest częścią systemu macOS i musi zostać zainstalowany ze źródła innego niż Apple.
user3439894
Czy pytanie macOS jest specyficzne? jest domyślnie instalowany w wielu dystrybucjach systemu Linux.
user702846
Ta strona dotyczy sprzętu i oprogramowania Apple, więc zakłada się, że macOS i iOS.
grg
Domyślnym poleceniem macOS byłoby użycie curl:curl -s http://ipecho.net/plain; echo
thibmaek