Script um eigene IP Adressen anzuzeigen (myip)

Jedes mal, wenn ich meine IP Adresse wissen will, gebe ich bei einer Suchmaschine “my ip address” ein und klicke auf eines der Ergebnisse. Dies ist nicht sehr elegant. Auf einem Server ohne Browser ist dies gar nicht möglich. Deshalb habe ich ein Script geschrieben, welches mir meine IP Adressen (IPv4 und IPv6) anzeigt.

Download

Das Script kann auf GitHub in meinem Scripts Repository herungergeladen werden: myip. Das Script kann so installiert werden:

$ sudo curl -o /usr/local/bin/myip https://raw.githubusercontent.com/mindfuckup/Scripts/master/myip
$ sudo chmod 755 /usr/local/bin/myip

Ist /usr/local/bin in der $PATH Variable, kann das Script aus der Shell mittels myip aufgerufen werden.

Das Script sieht so aus:

#!/usr/bin/env bash

#IPURL="https://icanhazip.com/ip"
IPURL="https://motd.ch/ip.php"

print_usage(){
cat << EOI
Displays IP addresses of the current host used for internet connections.

Usage: myip [options]

Options:

  -6    Show only IPv6 addresses (public ip address by default).
  -4    Show only IPv4 addresses (public ip address by default).
  -h    Show usage help.
  -l    Show local insted of public addresses.

No options produces a more verbose output.
EOI

}

print_public_ipv4_address(){
  echo "$(curl -s -4 -L $IPURL || echo "")"
}

print_public_ipv6_address(){
  echo "$(curl -s -6 -L $IPURL || echo "")"
}

print_local_ipv4_address(){
  echo "$(curl -s -4 -L --write-out %{local_ip} $IPURL -o /dev/null || echo "")"
}

print_local_ipv6_address(){
  echo "$(curl -s -6 -L --write-out %{local_ip} $IPURL -o /dev/null || echo "")"
}

main(){
  while getopts 46hlv name
  do
    case "$name" in
    4)
      flag_4=1
    ;;
    6)
      flag_6=1
    ;;
    h)
      print_usage
      exit
    ;;
    l)
      flag_l=1
    ;;
    ?)
      print_usage >&2
      exit 2
    ;;
    esac
  done

  if [[ -n $flag_l && -n $flag_4 ]]
  then
    print_local_ipv4_address
  fi
  if [[ -n $flag_l && -n $flag_6 ]]
  then
    print_local_ipv6_address
  fi

  if [[ -z $flag_l && -n $flag_4 ]]
  then
    print_public_ipv4_address
  fi
  if [[ -z $flag_l && -n $flag_6 ]]
  then
    print_public_ipv6_address
  fi

  if [[ -z $flag_l && -z $flag_4 && -z $flag_6 ]]
  then
    PUBLIC_IPV4_ADDRESS=$(print_public_ipv4_address)
    PUBLIC_IPV6_ADDRESS=$(print_public_ipv6_address)
    echo -e "Public IPv4 address:  ${PUBLIC_IPV4_ADDRESS:--}"
    echo -e "Public IPv6 address:  ${PUBLIC_IPV6_ADDRESS:--}"
    LOCAL_IPV4_ADDRESS=$(print_local_ipv4_address)
    LOCAL_IPV6_ADDRESS=$(print_local_ipv6_address)
    echo -e "Local IPv4 address:   ${LOCAL_IPV4_ADDRESS:--}"
    echo -e "Local IPv6 address:   ${LOCAL_IPV6_ADDRESS:--}"

    echo ""

    if [[ -n "$PUBLIC_IPV4_ADDRESS" && -n "$LOCAL_IPV4_ADDRESS" ]]
    then
      if [[ "$PUBLIC_IPV4_ADDRESS" != "$LOCAL_IPV4_ADDRESS" ]]
      then
        echo "IPv4: NAT"
      else
        echo "IPv4: No NAT"
      fi
    fi

    if [[ -n "$PUBLIC_IPV6_ADDRESS" && -n "$LOCAL_IPV6_ADDRESS" ]]
    then
      if [[ "$PUBLIC_IPV6_ADDRESS" != "$LOCAL_IPV6_ADDRESS" ]]
      then
        echo "IPv6: NAT"
      else
        echo "IPv6: No NAT"
      fi
    fi

  fi
}

main "$@"

Funktionsweise

Das Script ruft die Webseite https://motd.ch/ip.php auf, welches einem die IP Adresse zurück gibt, mit welche die Seite aufgerufen wurde. Je nach dem, ob IPv4 oder IPv6 genutzt wird, wird die entsprechende IP Adresse angezeigt. Beispielsweise bekommt man so seine IPv6 Adresse:

$ curl -6 https://motd.ch/ip.php
2a23:523:DEAD:BEEF:F00:BA5:23:05

Das kleine PHP Script ip.php ist auch im Scripts Repository zu finden: ip.php. So kann jeder einfach seine eigene Version hosten. Man kann im myip Script aber auch eine fremde Seite wie https://icanhazip.com/ip eingragen.

Funktionen

Standardmässig zeigt das Script die öffentliche und die lokal verwendete IPv4 und IPv6 Adresse an. Zudem wird angezeigt, ob NAT verwendet wird oder nicht.

$ myip
Public IPv4 address:  5.23.42.66
Public IPv6 address:  2a23:523:DEAD:BEEF:F00:BA5:23:05
Local IPv4 address:   10.5.23.1
Local IPv6 address:   2a23:523:DEAD:BEEF:F00:BA5:23:05

IPv4: NAT
IPv6: No NAT

Das Script bietet folgende Optionen

  • -6: Nur IPv6 Adressen anzeigen
  • -4: Nur IPv4 Adressen anzeigen
  • -h: Hilfe anzeigen
  • -l: Nur lokal verwendete Adressen anzeigen

So kann beispielsweise nur die lokal verwendete IPv4 Adresse angezeigt werden:

$ myip -4l
10.5.23.1

Jetzt kann man ganz einfach seine IP Adresse und weitere zusätzliche Informationen herausfinden, ohne den Browser zu öffnen. Toll 🙂

Links und weitere Informationen

2 thoughts on “Script um eigene IP Adressen anzuzeigen (myip)

  1. Was seu de dr unterschid zu “ifconfig”? Aso i meine entweder bini komplett näb dr spur uder ja….

    • Hey

      • In ifconfig siehst du deine öffentliche IP Adresse nicht, falls du hinter einem NAT Router bist und private IP Adressen verwendest.
      • Falls du mehrere IP Adressen konfiguriert hast, zeigt das Tool auch an, welche lokale IP Adresse für den Request verwendet wurde. Dies könnte auch der Fall sein, dass du auf einem Server eine fixe IPv6 Adresse vergeben hast, aber für neue Verbindungen nach Aussen eine temporäre IPv6 Adresse verwendet wird. In ifconfig ist nicht sichtbar, welche IPv6 Adressen für neue Verbindungen nach Aussen verwendet werden.

      Ich hoffe du verstehst jetzt den Unterschied!? Betrachtet man die Ausgabe des Tools, sollte dies eigentlich klar sein.

      Gruss

Leave a Reply

Your email address will not be published. Required fields are marked *