it-swarm.com.de

Wie erhalte ich die primäre IP-Adresse des lokalen Computers unter Linux und OS X?

Ich suche nach einer Befehlszeilenlösung, die mir die primäre (erste) IP-Adresse des localhost (mit Ausnahme von 127.0.0.1) zurückgibt

Die Lösung sollte zumindest für Linux (Debian und RedHat) und OS X 10.7+ funktionieren

Mir ist bekannt, dass ifconfig für beide verfügbar ist, aber die Ausgabe zwischen diesen Plattformen nicht so konsistent ist.

270
sorin

Verwenden Sie grep, um die IP-Adresse aus ifconfig zu filtern:

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

Oder mit sed:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Wenn Sie nur an bestimmten Schnittstellen, wlan0, eth0 usw. interessiert sind, dann:

ifconfig wlan0 | ...

Sie können den Befehl in Ihrem .bashrc als Alias ​​für create Ihren eigenen Befehl namens myip verwenden.

alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"

Ein viel einfacherer Weg ist hostname -I (hostname -i für ältere Versionen von hostname, aber siehe Kommentare). Dies ist jedoch nur unter Linux möglich.

442
Chris Seymour

Für Linux-Maschinen (nicht OS X):

hostname --ip-address
192
ACyclic

Folgendes funktioniert unter Linux, aber nicht unter OSX.

Dies ist überhaupt nicht von DNS abhängig und funktioniert auch, wenn /etc/hosts nicht richtig eingestellt ist (1 ist eine Abkürzung für 1.0.0.0):

ip route get 1 | awk '{print $NF;exit}'

oder vermeiden Sie awk und verwenden Sie das öffentliche DNS von Google unter 8.8.8.8, um offensichtliche Informationen zu erhalten:

ip route get 8.8.8.8 | head -1 | cut -d' ' -f8

Ein weniger zuverlässiger Weg: (siehe Kommentar unten)

hostname -I | cut -d' ' -f1
184
Collin Anderson

Bearbeitet (2014-06-01 2018-01-09)

Für eine stärkere Konfiguration mit vielen Schnittstellen und vielen konfigurierten IPs für jede Schnittstelle habe ich ein pure bash-Skript (nicht auf 127.0.0.1) geschrieben, um die richtige Schnittstelle zu finden. Und ip, basierend auf default route. Ich poste dieses Skript ganz unten in dieser Antwort.

Intro

Da beide Betriebssysteme standardmäßig bash installiert haben, gibt es einen Bash-Tipp für Mac und Linux:

Das Gebietsschema-Problem wird durch die Verwendung von LANG=C verhindert:

myip=
while IFS=$': \t' read -a line ;do
    [ -z "${line%inet}" ] && ip=${line[${#line[1]}>4?1:2]} &&
        [ "${ip#127.0.0.1}" ] && myip=$ip
  done< <(LANG=C /sbin/ifconfig)
echo $myip

Dies in eine Funktion setzen:

Minimal:

getMyIP() {
    local _ip _line
    while IFS=$': \t' read -a _line ;do
        [ -z "${_line%inet}" ] &&
           _ip=${_line[${#_line[1]}>4?1:2]} &&
           [ "${_ip#127.0.0.1}" ] && echo $_ip && return 0
      done< <(LANG=C /sbin/ifconfig)
}

Einfache Verwendung:

getMyIP
192.168.1.37

Lust auf Ordnung:

getMyIP() {
    local _ip _myip _line _nl=$'\n'
    while IFS=$': \t' read -a _line ;do
        [ -z "${_line%inet}" ] &&
           _ip=${_line[${#_line[1]}>4?1:2]} &&
           [ "${_ip#127.0.0.1}" ] && _myip=$_ip
      done< <(LANG=C /sbin/ifconfig)
    printf ${1+-v} $1 "%s${_nl:0:$[${#1}>0?0:1]}" $_myip
}

Verwendungszweck:

getMyIP
192.168.1.37

oder dieselbe Funktion ausführen, jedoch mit einem Argument:

getMyIP varHostIP
echo $varHostIP
192.168.1.37
set | grep ^varHostIP
varHostIP=192.168.1.37

Nota: Ohne Argument wird diese Funktion auf STDOUT, die IP und ein Newline ausgegeben. Mit einem Argument wird nichts gedruckt, aber eine als Argument genannte Variable wird erstellt und enthält IP ohne Neue Zeile.

Nota2: Dies wurde unter Debian, LaCie und NAS und MaxOs getestet. Wenn dies in Ihrer Umgebung nicht funktioniert, bin ich sehr an Feedback interessiert!

Ältere Version dieser Antwort

(Nicht gelöscht, da auf sed basiert, nicht auf bash.)

Warnung: Es gibt ein Problem mit Gebietsschemas!

Schnell und klein:

myIP=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')

Explodiert (Arbeit auch;)

myIP=$(
    ip a s |
    sed -ne '
        /127.0.0.1/!{
            s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p
        }
    '
)

Bearbeiten:

Wie! Dies scheint auf Mac OS... nicht zu funktionieren.

Ok, das scheint auf Mac OS genauso zu funktionieren wie auf meinem Linux:

myIP=$(LANG=C /sbin/ifconfig  | sed -ne $'/127.0.0.1/ ! { s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p; }')

gesplittet:

myIP=$(
    LANG=C /sbin/ifconfig  |
        sed -ne $'/127.0.0.1/ ! {
            s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p;
        }')

Mein Skript (Januar 2018):

Dieses Skript findet zuerst Ihre Standardroute und Schnittstelle, sucht dann nach dem lokalen IP-Matching-Netzwerk von Gateway und füllt die Variablen auf. Die letzten beiden Zeilen werden gerade gedruckt, etwa:

Interface   : en0
Local Ip    : 10.2.5.3
Gateway     : 10.2.4.204
Net mask    : 255.255.252.0
Run on mac  : true

oder

Interface   : eth2
Local Ip    : 192.168.1.31
Gateway     : 192.168.1.1
Net mask    : 255.255.255.0
Run on mac  : false

Nun da ist es:

#!/bin/bash
runOnMac=false
int2ip() { printf ${2+-v} $2 "%d.%d.%d.%d" \
        $(($1>>24)) $(($1>>16&255)) $(($1>>8&255)) $(($1&255)) ;}
ip2int() { local _a=(${1//./ }) ; printf ${2+-v} $2 "%u" $(( _a<<24 |
                  ${_a[1]} << 16 | ${_a[2]} << 8 | ${_a[3]} )) ;}
while IFS=$' :\t\r\n' read a b c d; do
    [ "$a" = "usage" ] && [ "$b" = "route" ] && runOnMac=true
    if $runOnMac ;then
        case $a in 
            gateway )    gWay=$b  ;;
            interface )  iFace=$b ;;
        esac
    else
        [ "$a" = "0.0.0.0" ] && [ "$c" = "$a" ] && iFace=${d##* } gWay=$b
    fi
done < <(/sbin/route -n 2>&1 || /sbin/route -n get 0.0.0.0/0)
ip2int $gWay gw
while read lhs rhs; do
    [ "$lhs" ] && { 
        [ -z "${lhs#*:}" ] && iface=${lhs%:}
        [ "$lhs" = "inet" ] && [ "$iface" = "$iFace" ] && {
            mask=${rhs#*netmask }
            mask=${mask%% *}
            [ "$mask" ] && [ -z "${mask%0x*}" ] &&
                printf -v mask %u $mask ||
                ip2int $mask mask
            ip2int ${rhs%% *} ip
            (( ( ip & mask ) == ( gw & mask ) )) &&
                int2ip $ip myIp && int2ip $mask netMask
        }
    }
done < <(/sbin/ifconfig)
printf "%-12s: %s\n" Interface $iFace Local\ Ip $myIp \
       Gateway $gWay Net\ mask $netMask Run\ on\ mac $runOnMac
30
F. Hauri

auf linux

hostname -I

auf macOS

ipconfig getifaddr en0

Beachten Sie, dass hostname -I mehrere Adressen in unzuverlässiger Reihenfolge zurückgeben kann (siehe man hostname ). Aber für mich gibt es einfach 192.168.1.X zurück, was Sie wollten.

23
Boris

Sie können dies auch versuchen, obwohl es Ihnen vielleicht nur 127.0.0.1 sagt

hostname  -i

oder

hostname -I
21
user3173508

Lösung

$ ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
192.168.8.16

Erläuterung

Der korrekte Weg, um Netzwerkinformationen abzufragen, verwendet ip:

  • -o einzeilige Ausgabe
  • route get to liefert die tatsächliche Kernel-Route zu einem Ziel
  • 8.8.8.8 Google IP, kann jedoch die tatsächliche IP-Adresse verwenden, die Sie erreichen möchten

z.B. ip Ausgabe:

8.8.8.8 via 192.168.8.254 dev enp0s25 src 192.168.8.16 uid 1000 \   cache

Um die src ip zu extrahieren, ist sed die hellste und am besten mit regex unterstützte Unterstützung:

  • -n standardmäßig nicht ausgegeben
  • 's/pattern/replacement/p' nur Muster und Ausdruck ersetzen
  • .*src \([0-9.]\+\).* stimmt mit der von dem Kernel verwendeten src-IP überein, um 8.8.8.8 zu erreichen

z.B. Endausgabe:

192.168.8.16

Andere Antwort

Ich denke, dass keine der vorhergehenden Antworten für mich gut genug ist, da sie nicht in einer aktuellen Maschine funktionieren (Gentoo 2018).

Probleme, die ich bei den vorhergehenden Antworten gefunden habe:

  • verwendung einer Positionsspalte in der Befehlsausgabe;
  • verwendung von ifconfig, das veraltet ist, und zum Beispiel keine Mehrfach-IPs auflisten;
  • verwendung von awk für eine einfache Aufgabe, die sed besser bewältigen kann;
  • ip route get 1 ist unklar und ist eigentlich ein Alias ​​für ip route get to 1.0.0.0
  • verwenden Sie den Befehl hostname, der nicht die Option -I in allen Geräten hat und in meinem Fall 127.0.0.1 zurückgibt.
21
giosh94mhz

Sie können die IP-Adresse der Version 4 von eth0 auch erhalten, indem Sie diesen Befehl in Linux verwenden

/sbin/ip -4 -o addr show dev eth0| awk '{split($4,a,"/");print a[1]}'

Ausgabe wird so sein

[[email protected] Sathish]# /sbin/ip -4 -o addr show dev eth0| awk '{split($4,a,"/");print a[1]}'
192.168.1.22
20
Sathish

Dies funktioniert unter Linux und OSX

Dadurch wird die Schnittstelle mit der Standardroute verknüpft

NET_IF=`netstat -rn | awk '/^0.0.0.0/ {thif=substr($0,74,10); print thif;} /^default.*UG/ {thif=substr($0,65,10); print thif;}'`

Rufen Sie mithilfe der oben erkannten Schnittstelle die IP-Adresse ab.

NET_IP=`ifconfig ${NET_IF} | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'`

OSX

uname -a

Darwin-Laptop 14.4.0 Darwin-Kernel-Version 14.4.0: Do May 28 11:35:04 PDT 2015; root: xnu-2782.30.5 ~ 1/RELEASE_X86_64 x86_64

echo $NET_IF

en5 

echo $NET_IP

192.168.0.130

CentOS Linux

uname -a

Linux dev-cil.medfx.local 2.6.18-164.el5xde 1 SMP Do Sep 3 04:03:03 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

echo $NET_IF

eth0

echo $NET_IP

192.168.46.10

12
Colin Fletcher

Andere Methoden verwenden Sie können einen Konflikt eingeben, bei dem mehrere IP-Adressen im System definiert sind .. Diese Zeile erhält immer die standardmäßig verwendete IP-Adresse.

ip route get 8.8.8.8 | head -1 | awk '{print $7}'
9
Kjeld Flarup

Ich extrahiere meinen Kommentar zu dieser Antwort:

ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'

Es basiert auf der Antwort von @CollinAnderson, die in meinem Fall nicht funktioniert hat.

5
estani

Primäre Netzwerkschnittstelle IP

ifconfig `ip route | grep default | head -1 | sed 's/\(.*dev \)\([a-z0-9]*\)\(.*\)/\2/g'` | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | head -1
4
kaspars

Ich muss der Antwort von Collin Anderson hinzufügen, dass diese Methode auch berücksichtigt, wenn Sie zwei Schnittstellen haben und beide als aktiv angezeigt werden.

ip route get 1 | awk '{print $NF;exit}'

Ich habe an einer Anwendung mit Raspberry Pi gearbeitet und brauchte die IP-Adresse, die tatsächlich verwendet wurde, nicht nur, ob sie aktiv war oder nicht. Die meisten anderen Antworten geben beide IP-Adressen zurück, was für mein Szenario ohnehin nicht unbedingt hilfreich ist.

3
c7borg

Der kürzeste Weg, um Ihre lokale IPv4-Adresse in Ihrem Linux-System abzurufen:

hostname -I | awk '{print $1}'
3
harry

Für alles gibt es ein Knotenpaket. Es ist plattformübergreifend und einfach zu bedienen.

$ npm install --global internal-ip-cli

$ internal-ip
fe80::1

$ internal-ip --ipv4
192.168.0.3

Dies ist ein umstrittener Ansatz, aber die Verwendung von npm für Werkzeuge wird beliebter, egal ob es nun so ist oder nicht.

2
Dennis

Eine weitere ifconfig-Variante, die sowohl unter Linux als auch unter OSX funktioniert:

ifconfig | grep "inet " | cut -f2 -d' '
2
ccpizza

Ich ging durch viele Links (StackExchange, AskUbuntu, StackOverflow usw.) und entschied mich dazu, die besten Lösungen in einem Shell-Skript zusammenzufassen. 

Meiner Meinung nach sind diese beiden QAs die besten:

Wie kann ich meine externe IP-Adresse in einem Shell-Skript erhalten? https://unix.stackexchange.com/q/22615

Wie finde ich meine interne IP-Adresse? https://askubuntu.com/a/604691

Hier ist meine Lösung, die auf einigen Ideen basiert, die von rsp in seinem Repository ( https://github.com/rsp/scripts/ ) veröffentlicht wurden. 

Einige von Ihnen könnten sagen, dass dieses Skript für so einfache Aufgaben extrem groß ist, aber ich möchte es so einfach und flexibel wie möglich machen. Es unterstützt einfache Konfigurationsdateien, wodurch die Standardwerte neu definiert werden können.

Es wurde erfolgreich unter Cygwin, MINGW und Linux (Red Hat) getestet.

Interne IP-Adresse anzeigen

myip -i

Externe IP-Adresse anzeigen

myip -e

Quellcode, auch verfügbar unter dem Link: https://github.com/ildar-shaimordanov/tea-set/blob/master/home/bin/myip . Ein Beispiel für eine Konfigurationsdatei befindet sich neben dem Hauptskript. 

#!/bin/bash

# =========================================================================
#
# Getting both internal and external IP addresses used for outgoing 
# Internet connections.
#
# Internal IP address is the IP address of your computer network interface 
# that would be used to connect to Internet.
#
# External IP address is the IP address that is visible by external 
# servers that you connect to over Internet.
#
# Copyright (C) 2016 Ildar Shaimordanov
#
# =========================================================================

# Details of the actual implementation are based on the following QA:
#
# How can I get my external IP address in a Shell script?
# https://unix.stackexchange.com/q/22615
#
# How do I find my internal ip address?
# https://askubuntu.com/a/604691

# =========================================================================

for f in \
    "$( dirname "$0" )/myip.conf" \
    ~/.myip.conf \
    /etc/myip.conf
do
    [ -f "$f" ] && {
        . "$f"
        break
    }
done

# =========================================================================

show_usage() {
    cat - <<HELP
USAGE
  $( basename "$0" ) [OPTIONS]

DESCRIPTION
  Display the internal and external IP addresses

OPTIONS
  -i  Display the internal IP address
  -e  Display the external IP address
  -v  Turn on verbosity
  -h  Print this help and exit
HELP
    exit
}

die() {
    echo "$( basename "$0" ): [email protected]" >&2
    exit 2
}

# =========================================================================

show_internal=""
show_external=""
show_verbose=""

while getopts ":ievh" opt
do
    case "$opt" in
    i )
        show_internal=1
        ;;
    e )
        show_external=1
        ;;
    v )
        show_verbose=1
        ;;
    h )
        show_usage
        ;;
    \? )
        die "Illegal option: $OPTARG"
        ;;
    esac
done

if [ -z "$show_internal" -a -z "$show_external" ]
then
    show_internal=1
    show_external=1
fi

# =========================================================================

# Use Google's public DNS to resolve the internal IP address
[ -n "$TARGETADDR" ] || TARGETADDR="8.8.8.8"

# Query the specific URL to resolve the external IP address
[ -n "$IPURL" ] || IPURL="ipecho.net/plain"

# Define explicitly $IPCMD to gather $IPURL using another tool
[ -n "$IPCMD" ] || {
    if   which curl >/dev/null 2>&1
    then
        IPCMD="curl -s"
    Elif which wget >/dev/null 2>&1
    then
        IPCMD="wget -qO -"
    else
        die "Neither curl nor wget installed"
    fi
}

# =========================================================================

resolveip() {
    {
        gethostip -d "$1" && return
        getent ahostsv4 "$1" \
        | grep RAW \
        | awk '{ print $1; exit }' 
    } 2>/dev/null
}

internalip() {
    [ -n "$show_verbose" ] && printf "Internal: "

    case "$( uname | tr '[:upper:]' '[:lower:]' )" in
    cygwin* | mingw* | msys* )
        netstat -rn \
        | grep -w '0.0.0.0' \
        | awk '{ print $4 }'
        return
        ;;
    esac

    local t="$( resolveip "$TARGETADDR" )"
    [ -n "$t" ] || die "Cannot resolve $TARGETADDR"
    ip route get "$t" \
    | awk '{ print $NF; exit }'
}

externalip() {
    [ -n "$show_verbose" ] && printf "External: "

    eval $IPCMD "$IPURL" $IPOPEN
}

# =========================================================================

[ -n "$show_internal" ] && internalip
[ -n "$show_external" ] && externalip

# =========================================================================

# EOF
2
jsxt

Nicht sicher, ob dies in allen Betriebssystemen funktioniert, probieren Sie es aus.

ifconfig | awk -F"[ :]+" '/inet addr/ && !/127.0/ {print $4}'
2
Jotne
ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'
2
Faizan Noor
ip addr show | grep -E '^\s*inet' | grep -m1 global | awk '{ print $2 }' | sed 's|/.*||'
2
rbolante

Ich benutze nur Network Interface Names , mein benutzerdefinierter Befehl ist

[[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' 

in meinem eigenen Notizbuch

[[email protected] ~]$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[[email protected] ~]$ [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]'
192.168.2.221
[[email protected] ~]$

wenn die Netzwerkschnittstelle jedoch mindestens eine IP-Adresse besitzt, werden alle IP-Adressen angezeigt

zum Beispiel

Ubuntu 16.10

[email protected]:~# sed -r -n '[email protected]"@@g;[email protected]^VERSION=(.*)@\[email protected]' /etc/os-release
16.04.1 LTS (Xenial Xerus)
[email protected]:~# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]'
178.62.236.250
[email protected]:~#

Debian Jessie

[email protected]:~# sed -r -n '[email protected]"@@g;[email protected]^PRETTY_NAME=(.*)@\[email protected]' /etc/os-release
Debian GNU/Linux 8 (jessie)
[email protected]:~# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]'
192.81.222.54
[email protected]:~# 

CentOS 6,8

[[email protected] ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[[email protected] ~]# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]'
162.243.17.224
10.13.0.5
[[email protected] ~]# ip route get 1 | awk '{print $NF;exit}'
162.243.17.224
[[email protected] ~]#

Fedora 24

[[email protected] ~]# cat /etc/redhat-release 
Fedora release 24 (Twenty Four)
[[email protected] ~]# [[ $(ip addr | grep enp0s25) != '' ]] && ip addr show dev enp0s25 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]' || ip addr show dev eth0 | sed -n -r '[email protected]*inet (.*)/.*brd.*@\[email protected]'
104.131.54.185
10.17.0.5
[[email protected] ~]# ip route get 1 | awk '{print $NF;exit}'
104.131.54.185
[[email protected] ~]#

Es scheint, als wäre der Befehl ip route get 1 | awk '{print $NF;exit}' von link genauer, was außerdem kürzer ist.

2
user7040344

Angenommen, Sie benötigen Ihre primäre public IP-Adresse, wie sie vom Rest der Welt gesehen wird, versuchen Sie es mit einer der folgenden:

wget http://ipecho.net/plain -O - -q
curl http://icanhazip.com
curl http://ifconfig.me/ip
2
Putnik

Funktioniert auf Mac, Linux und in Docker Containern:

$ hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print $ 1; Ausfahrt}')

Funktioniert auch auf Makefile als:

LOCAL_Host := ${Shell hostname --ip-address 2> /dev/null || (ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | awk '{print $1; exit}')}

1
peleteiro

Findet eine IP-Adresse dieses Computers in einem Netzwerk, das ein Standard-Gateway ist (z. B. alle virtuellen Netzwerke, Docker-Bridges), z. Internet-Gateway, WLAN-Gateway, Ethernet 

ip route| grep $(ip route |grep default | awk '{ print $5 }') | grep -v "default" | awk '/scope/ { print $9 }'

Funktioniert unter Linux.

Prüfung:

➜  ~ ip route| grep $(ip route |grep default | awk '{ print $5 }') | grep -v "default" | awk '/scope/ { print $9 }'
192.168.0.114

➜  reverse-networking git:(feature/type-local) ✗ ifconfig wlp2s0
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.114  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::d3b9:8e6e:caee:444  prefixlen 64  scopeid 0x20<link>
        ether ac:x:y:z  txqueuelen 1000  (Ethernet)
        RX packets 25883684  bytes 27620415278 (25.7 GiB)
        RX errors 0  dropped 27  overruns 0  frame 0
        TX packets 7511319  bytes 1077539831 (1.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Wenn Sie die Netzwerkschnittstelle kennen (Eth0, WLAN, Tun0 usw.):

ifconfig eth0 | grep addr: | awk '{ print $2 }' | cut -d: -f2
0
droidgren

Wenn Sie npm und node installiert haben: npm install -g ip && node -e "const ip = require('ip'); console.log(ip.address())"

0
Antoine F.

Beachten Sie auf einem Mac Folgendes:

scutil --nwi | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
0
cl0kc
ifconfig $(netstat -rn | grep -E "^default|^0.0.0.0" | head -1 | awk '{print $NF}') | grep 'inet ' | awk '{print $2}' | grep -Eo '([0-9]*\.){3}[0-9]*' 
0
AlanG
ifconfig | grep "inet addr:" | grep -v "127.0.0.1" | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'  | head -1
0
user2802053

Für Linux benötigen Sie diesen Befehl:

ifconfig $1|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'

geben Sie dies in Ihre Shell ein und Sie kennen einfach Ihre IP.

0
Statham

Dies ist einfacher zu lesen: ifconfig | grep 'inet addr:' |/usr/bin/awk '{print $2}' | tr -d addr:

0
Cory Thorson