-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmyip
executable file
·110 lines (103 loc) · 2.42 KB
/
myip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env bash
#
# Show current IP
#
get_external_ip() {
IPINFO_FINGER="ip@ip.malte70.de"
IPINFO_HTTP_API="https://ip.malte70.de/api.php/ip"
#if [[ "$1" == "finger" ]]
IP=""
if which finger &>/dev/null
then
IP=$(finger $IPINFO_FINGER 2>/dev/null | grep -v '^\[' | head -n+2)
fi
if [[ -z "$IP" ]]
then
IP=$(curl -s $IPINFO_HTTP_API)
fi
echo $IP | tr -d "\n"
}
show_help() {
echo "myip"
echo -e "\tShows your current IP address"
echo "Usage: myip [-4|-6|-g|-a|-x]"
echo -e "Options\n\t-4\tShow IPv4 address"
echo -e "\t-6\tShow IPv6 address"
echo -e "\t-g\tShow global IP using ip.malte70.de API"
echo -e "\t-a\tShow all informations at once"
echo -e "\t-x\tExtended/expert output mode"
}
SHOW_IPv4="no"
SHOW_IPv6="no"
SHOW_GLOBAL="no"
SHOW_EXPERT="no"
if [ $# -eq 0 ]; then
SHOW_IPv4="yes"
SHOW_IPv6="no"
SHOW_GLOBAL="no"
else
if [ $1 == "--help" ]; then
show_help
exit 0
elif [ $1 == "-4" ]; then
SHOW_IPv4="yes"
elif [ $1 == "-6" ]; then
SHOW_IPv6="yes"
elif [ $1 == "-g" ]; then
SHOW_GLOBAL="yes"
elif [ $1 == "-a" ]; then
SHOW_IPv4="yes"
SHOW_IPv6="yes"
SHOW_GLOBAL="yes"
elif [ $1 == "-x" ]; then
SHOW_EXPERT="yes"
fi
fi
# Detect ip info tool
if which ip &>/dev/null; then
IP="`which ip` addr show"
else
IP="`which ifconfig`"
fi
# Expert mode
if [ $SHOW_EXPERT == "yes" ]; then
which ip &>/dev/null || {
echo "$0: Error: \"ip\" not found in PATH!" >&2
exit 1
}
ip addr | \
grep -E '(inet |inet6 | UP | UNKNOWN )' | \
awk '{ print $2 }' | \
awk '/:$/{ print "§" $0 } /\//{ print $1 }' | \
cut -d/ -f1 | \
tr "\n" " " | \
tr "§" "\n" | \
grep -v -E '(^|: )$' | \
grep -v ': $' | \
sed 's/:/: /' | \
sort | \
sed 's/ \+/ /g'
exit 0
fi
# IPv4
if [ $SHOW_IPv4 == "yes" ]; then
IPv4=$($IP | grep inet\ |awk '{ print $2 }' | cut -d/ -f1)
{
for IP in $IPv4; do
echo $IP
done
} | sort | grep -v "127.0.0.1"
fi
# IPv6
if [ $SHOW_IPv6 == "yes" ]; then
IPv6=$($IP | grep inet6\ |awk '{ print $2 }' | cut -d/ -f1 | cut -d% -f1)
{
for IP in $IPv6; do
echo $IP
done
} | sort | grep -v "::1"
fi
# Global IP
if [ $SHOW_GLOBAL == "yes" ]; then
echo $(get_external_ip)
fi