Skip to content

Instantly share code, notes, and snippets.

@mailinglists35
Created September 26, 2017 09:27
Show Gist options
  • Save mailinglists35/0d7b2727cb852014d0f76dffd295b71d to your computer and use it in GitHub Desktop.
Save mailinglists35/0d7b2727cb852014d0f76dffd295b71d to your computer and use it in GitHub Desktop.
Command for determining my public IP?
up vote
392
down vote
favorite
230
If I check with google, I can see my public IP. Is there something on the Ubuntu command-line which will yield me the same answer?
networking
shareimprove this question
edited Nov 23 '12 at 11:00
Tshepang
1,18021434
asked Jan 16 '12 at 11:50
kfmfe04
2,18441017
2
"having dynamic IP", "SSH using some other system across the internet", "the command which will display the present PUBLIC IP". You see the chicken/egg problem here? How would you be able to run commands on a remote server without knowing its address? You might be more interested in services like no-ip.com / DynDNS.org. – gertvdijk Jan 9 '13 at 13:11
one cannot SSH without knowing the public IP my friend... dynDNS costs a lot and no-ip tough works but the situation don't allow that... anyway the question has been already answered.. thanks for your suggestion – Z9iT Jan 10 '13 at 8:46
PS duckduckgo.com/?q=ip (no command line, but no big brother G neither) – Campa Jan 28 '15 at 7:28
Maybe this should be a separate question, but I would like to see an alert when my public IP address changes. For now, I'm just using the following answers in a crontab with notify-send. – PJ Brunet Dec 2 '16 at 19:36
add a comment
22 Answers
active oldest votes
up vote
505
down vote
accepted
If you are not behind a router, you can find it out using ifconfig.
If you are behind a router, then your computer will not know about the public IP address as the router does a network address translation. You could ask some website what your public IP address is using curl or wget and extract the information you need from it:
curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
or shorter
curl ipinfo.io/ip
shareimprove this answer
edited Aug 8 at 5:48
Cameron Gagnon
1034
answered Jan 16 '12 at 11:56
Michael K
7,13311219
24
ty - right after I posted, I realized that I didn't google for an answer first: looks like this will work curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' Other possibilities are listed here: go2linux.org/what-is-my-public-ip-address-with-linux – kfmfe04 Jan 16 '12 at 12:01
If he agrees I could also put this into my answer. However,I am usually against solving the problem for someone, instead I regard also "pointers into a direction" as answer. Users wont understand the context of what they are doing if they are always faced with complete solutions. – Michael K Jan 16 '12 at 12:46
1
sure - you can add it to your answer – kfmfe04 Jan 16 '12 at 13:18
1
To clarify: That was a hack, and a very ugly one at that, so I did an edit to make it simpler and something that people can remember. – jrg♦ Jan 16 '12 at 16:17
2
Exacly as Giovanni P stated. The OP should change the accepted anwser. – loostro Apr 11 '14 at 21:45
This worked for me; a quick, correct result. Maybe something changed/changed back. – iynque Aug 31 '15 at 0:08
13
curl -s ipinfo.io/ip – chao Oct 7 '15 at 20:38
Be careful to use proper quoting of variable names if you use the results of these sorts of external services for variables in a script. If one of these services gets hacked it is possible someone could inject dangerous code into your command line. – Code Commander Dec 23 '15 at 21:59
1
The shortest I found was curl ipinfo.io. – JimBobOH Jan 10 '16 at 13:49
I made an alias: myip() { curl -s http://ipinfo.io/ip } – chovy Jan 12 '16 at 8:27
I tried both solution and I have different results the first one is correct, the second one it the one from my ISP. – Ahmad Abuhasna Jun 13 '16 at 8:33
can you please explain the regular expression 's/<.*$//' and why do you use twice -e? – Jas Sep 6 '16 at 7:55
curl is not installed but wget works perfectly. – WinEunuuchs2Unix Nov 22 '16 at 1:43
add a comment
up vote
330
down vote
For finding the external ip, you can either use external web-based services, or use system based methods. The easier one is to use the external service, also the ifconfig based solutions will work in your system only if you're not behind a NAT. the two methods has been discussed below in detail.
Finding external IP using external services
The easiest way is to use an external service via a commandline browser or download tool. Since wget is available by default in Ubuntu, we can use that.
To find your ip, use-
$ wget -qO- http://ipecho.net/plain ; echo
Courtesy:
http://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
http://ipecho.net/plain
You could also use lynx(browser) or curl in place of wget with minor variations to the above command, to find your external ip.
Using curl to find the ip:
$ curl ipecho.net/plain
For a better formatted output use:
$ curl ipecho.net/plain ; echo
A faster (arguably the fastest) method using dig with OpenDNS as resolver:
The other answers here all go over HTTP to a remote server. Some of them require parsing of the output, or rely on the User-Agent header to make the server respond in plain text. They also change quite frequently (go down, change their name, put up ads, might change output format etc.).
The DNS response protocol is standardised (the format will stay compatible).
Historically DNS services (OpenDNS, Google Public DNS, ..) tend to survive much longer and are more stable, scalable and generally looked after than whatever new hip whatismyip.com HTTP service is hot today.
(for those geeks that care about micro-optimisation), this method should be inherently faster (be it only by a few micro seconds).
Using dig with OpenDNS as resolver:
$ dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
Copied from: https://unix.stackexchange.com/a/81699/14497
Finding external IP without relying on external services
If you know your network interface name
Type the following in your terminal:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
In the above, replace <interface_name> with the name of your actual interface, e.g: eth0, eth1, pp0, etc...
Example Usage:
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
If you don't know your network interface name
Type the following in your terminal (this gets the name and ip address of every network interface in your system):
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
Example Usage:
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444
N.B: Outputs are indicative and not real.
Courtesy: http://www.if-not-true-then-false.com/2010/linux-get-ip-address/
UPDATE
LANG=c has been added to ifconfig based usages, so that it always gives the english output, irrespective of locale setting.
shareimprove this answer
edited Apr 13 at 12:37
Community♦
1
answered Jun 1 '12 at 12:10
saji89
8,88443357
1
@Z9iT, Sure.. It should work in any linux distribution provided that you have wget installed. As said if you have either curl or lynx already available please use that instead. You would need root permission to install so use sudo apt-get install wget – saji89 Jun 1 '12 at 12:19
9
The commands with ifconfig do only work, if you are not behind a NAT. – lukassteiner Jan 23 '13 at 15:52
1
just use -w curl option instead of echo :) curl -w '\n' ident.me – drAlberT Jun 11 '14 at 8:17
3
This proposal using dig is pretty nice unix.stackexchange.com/questions/22615/… – binaryanomaly Mar 14 '15 at 15:31
@binaryanomaly, thanks for that. I'll add it to the answer. – saji89 Mar 16 '15 at 5:55
1
@saji ifconfig if obsolete, please use iproute2 ;^). The command would be ip -o -4 a s eth0 | awk '{sub(/\/.*/, "", $4);print $4}'. – bufh Jun 11 '15 at 21:28
@woahguy, Please add more information, as to what didn't work for you. – saji89 Jul 27 '15 at 5:31
I added LANG=c to ifconfig so it always gets the english output. – rubo77 Oct 5 '15 at 2:40
The last version without external services only works, if your computer is connected directly to the internet which is rarely the case, otherwise you only get your local IP address. – rubo77 Oct 5 '15 at 2:42
If you'd like to retrieve your IP address into a notification you could use: notify-send $(dig +short myip.opendns.com @resolver1.opendns.com) which is something I use as a bound application in kubuntu – Jonathan Mar 7 at 19:18
add a comment
up vote
90
down vote
My favorite has always been :
curl ifconfig.me
simple, easy to type.
You will have to install curl first ;)
If ifconfig.me is down try icanhazip.com and or ipecho.net
curl icanhazip.com
or
curl ipecho.net
shareimprove this answer
edited Sep 20 '16 at 16:37
answered Jun 1 '12 at 12:41
bodhi.zazen
64.5k8131226
will this display the results inside terminal? – Z9iT Jun 1 '12 at 12:45
3
@Z9iT, I just checked this now. Yes, it would output the external ip in your terminal. – saji89 Jun 1 '12 at 13:13
6
The response time from ifconfig.me seems quite a bit slower than ipecho.net. – Drew Noakes Oct 25 '13 at 14:57
2
If you don't have curl but have wget: wget -U curl -qO- ifconfig.me – Stéphane Chazelas Aug 14 '14 at 20:16
you might not need curl – jfs Sep 8 '14 at 16:35
2
ifconfig.me does not seem to be responding :( – Asfand Qazi Jan 20 '16 at 11:51
1
@AsfandYarQazi - working here. You can try one of the alternates , icanhazip.com – bodhi.zazen Jan 20 '16 at 12:48
@bodhi.zazen ipconfig.me seams to be down. Please update your response with some other url that works. – valentt Sep 20 '16 at 9:50
@valentt ifconfig.me is up here, if it is not working for you try ipecho.net and icanhazip.com – bodhi.zazen Sep 20 '16 at 16:38
curl ifconfig.me does not work – prayagupd May 24 at 17:59
@prayagupd - This answer is 5 years old and ifconfig.me goes up and down. Use another site icanhazip.com for example, second example still works. – bodhi.zazen May 24 at 18:11
Thanks @bodhi.zazen curl icanhazip.com or curl http://checkip.amazonaws.com (on aws at least) was working. – prayagupd May 24 at 18:13
ifconfig.me and ipecho.net don't work anymore – Alberto M Jun 16 at 13:41
add a comment
up vote
52
down vote
icanhazip.com is my favorite.
curl icanhazip.com
You can request IPv4 explicitly:
curl ipv4.icanhazip.com
If you don't have curl you can use wget instead:
wget -qO- icanhazip.com
shareimprove this answer
edited Jan 18 '16 at 16:40
answered Jun 1 '12 at 17:23
yprez
691715
It returns ipv6 for me :'( – HackToHell Jan 10 '13 at 9:41
3
try ipv4.icanhazip.com – yprez Jan 10 '13 at 11:15
simple yet elegant solution – ram Apr 15 '13 at 9:37
... and fast website :) – franzlorenzon Jan 31 '14 at 9:50
3
IPv4: curl ipv4.icanhazip.com IPv6: curl ipv6.icanhazip.com – Peter Feb 21 '14 at 10:43
2
Busybox doesn't have curl, use this instead: wget -qO- http://icanhazip.com – Hengjie Feb 23 '14 at 8:59
Edited answer to reflect all comments. – yprez Feb 23 '14 at 10:04
1
here's a bash-only command: exec 3<>/dev/tcp/icanhazip.com/80 && echo -e 'GET / HTTP/1.0\n' >&3 && cat <&3 – jfs Sep 8 '14 at 16:34
This is much, much faster than ifconfig.me – Tek Mar 4 '15 at 19:13
1
ipv6.icanhazip.com seems to not work anymore. – Hibou57 Jan 18 '16 at 16:00
@Hibou57 thanks, edited. – yprez Jan 18 '16 at 16:41
It prefers IPv6! Yay! – Asfand Qazi Jan 20 '16 at 11:52
@Hibou57, ipv6.icanhazip.com works only if you have ipv6. For me, I can use it from home (where I do have ipv6), but at work it says "Couldn't connect to server". – Dan Jones Mar 11 '16 at 18:44
1
Worth noting that icanhazip.com provides HTTPS as well. – eddiezane Aug 18 '16 at 13:02
add a comment
up vote
37
down vote
I've found everything to be annoying and slow, so I wrote my own. It's simple and fast.
Its API is on http://api.ident.me/
Examples:
curl ident.me
curl v4.ident.me
curl v6.ident.me
shareimprove this answer
answered Jan 3 '13 at 15:49
Pierre Carrier
92578
1
Woah, that was really fast! – waldyrious Dec 7 '13 at 4:19
1
I find the icanhazip.com solution faster and it includes a newline in the output. – Tyler Collier Aug 19 '14 at 0:00
1
Yes, it was indeed faster lately. Just tweaked my solution. – Pierre Carrier Sep 9 '14 at 13:53
1
Kudos! 2 years and you are still maintaining it. Well done. "IDENTify ME", is what comes to my mind, when I need ip check :) – Mohnish Sep 28 '15 at 1:37
add a comment
up vote
29
down vote
You could use a DNS request instead of HTTP request to find out your public IP:
$ dig +short myip.opendns.com @resolver1.opendns.com
It uses resolver1.opendns.com dns server to resolve the magical myip.opendns.com hostname to your ip address.
shareimprove this answer
answered Feb 27 '14 at 15:07
jfs
1,7611727
2
This is really fast. I did one warmup execution, then 10 executions each of this and curl icanhazip.com. Average for the curl version: 174ms. Average for the DNS-only version: 9ms. ~19x faster. See also: unix.stackexchange.com/a/81699/8383 – Adam Monsen Mar 10 '15 at 21:06
1
@AdamMonsen Thank you for the link. The point of using DNS (as the answer that you've linked says) is that the response is standard (and unlikely to change) and the service (OpenDNS) might stick around longer than most of its http alternatives. The time it takes to make the request might be shadowed by the command start up time. – jfs Mar 11 '15 at 0:40
Yep. I wouldn't be surprised if curl itself is slower than dig. Even if they were rewritten to be as similar as possible, curl would still be slower; it uses HTTP (including DNS) and dig only uses DNS. – Adam Monsen Mar 11 '15 at 4:16
add a comment
up vote
17
down vote
The one i'm using is :
wget -O - -q icanhazip.com
Yes, you can have ip :-)
shareimprove this answer
answered Jan 16 '12 at 14:20
jflaflamme
50727
3
I prefer curl icanhazip.com sometimes wget is the only one available, but sometimes no wget is available as well and curl is your only option (like OS/X). Either way curl icanhazip.com is almost as easy as curl ifconfig.me but much funnier ;-) – TryTryAgain Aug 25 '12 at 20:38
add a comment
up vote
10
down vote
Type in this exactly, press Enter where indicated:
telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
HOST: ipecho.net Enter
BROWSER: web-kitEnter
Enter
This manually submits a HTTP request, which will return your IP at the bottom of a HTTP/1.1 200 OK reply
Example output:
$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit
HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html
f
111.222.333.444
0
shareimprove this answer
edited Jul 2 '13 at 7:14
lgarzo
11.3k42530
answered Jul 2 '13 at 6:38
Liam
10112
3
Nice, this worked well, not having to install curl was an advantage for me: one liner: printf "GET /plain HTTP/1.1\nHOST: ipecho.net\nBROWSER: web-kit\n\n" | nc ipecho.net 80 – Ozone Mar 19 '14 at 5:32
great answer. learned something – prayagupd May 24 at 18:17
add a comment
up vote
9
down vote
Amazon AWS
curl http://checkip.amazonaws.com
Sample output:
123.123.123.123
I like it because:
it returns just the plaintext IP, nothing else
it is from a well known provider which is unlikely to go offline anytime soon
shareimprove this answer
edited Mar 25 at 8:37
answered Dec 21 '15 at 22:06
Ciro Santilli 刘晓波死 六四事件 法轮功
4,57532732
add a comment
up vote
7
down vote
Another fast one (might well be the fastest, relatively)
curl ipecho.net/plain
shareimprove this answer
edited Jan 10 '14 at 4:19
answered Dec 31 '13 at 20:49
Mohnish
18114
add a comment
up vote
6
down vote
I have a stupid service for this by telnet. Something like this:
telnet myip.gelma.net
Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx
Feel free to use it.
shareimprove this answer
edited Mar 13 '14 at 12:52
Dan
5,33423667
answered Mar 13 '14 at 12:37
Gelma
8713
add a comment
up vote
6
down vote
For this, STUN was invented. As a client you can send a request to a publicly available STUN server and have it give back the IP address it sees. Sort of the low level whatismyip.com as it uses no HTTP and no smartly crafted DNS servers but the blazingly fast STUN protocol.
Using stunclient
If you have stunclient installed (apt-get install stuntman-client on debian/ubuntu) you can simply do:
$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
where A.B.C.D is the IP address of your machine on the local net and W.X.Y.Z is the IP address servers like websites see from the outside (and the one you are looking for). Using sed you can reduce the output above to only an IP address:
stunclient stun.services.mozilla.com |
sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"
However, your question was how to find it using the command line, which might exclude using a STUN client. So I wonder...
Using bash
A STUN request can be handcrafted, sent to an external STUN server using netcat and be post-processed using dd, hexdump and sed like so:
$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
nc -u -w 2 stun.services.mozilla.com 3478 |
dd bs=1 count=4 skip=28 2>/dev/null |
hexdump -e '1/1 "%u."' |
sed 's/\.$/\n/'
The echo defines a binary STUN request (0x0001 indicates Binding Request) having length 8 (0x0008) with cookie 0xc00cee and some pasted stuff from wireshark. Only the four bytes representing the external IP are taken from the answer, cleaned and printed.
Working, but not recommended for production use :-)
P.S. Many STUN servers are available as it is a core technology for SIP and WebRTC. Using one from Mozilla should be safe privacy-wise but you could also use another: STUN server list
shareimprove this answer
answered Oct 9 '15 at 17:21
Victor Klos
10115
+1 for the geekiest and actually most apropos technology. The http query works, which is what I've been using all my life, but I like that there's actually been some thought put into the question. I didn't know this. Thanks! – Mike S Oct 18 '16 at 17:47
add a comment
up vote
4
down vote
You can read a web page using only bash, without curl, wget:
$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
echo 'GET /' >&3 && # send http 0.9 request
read -u 3 && echo $REPLY && # read response
exec 3>&- # close fd
shareimprove this answer
edited Oct 14 '14 at 19:52
answered Sep 18 '14 at 10:47
jfs
1,7611727
add a comment
up vote
2
down vote
Use cURL with ipogre.com (IPv4 and IPv6 are supported).
IPv4
curl ipv4.ipogre.com
IPv6
curl ipv6.ipogre.com
http://www.ipogre.com/faqs/linux.php
shareimprove this answer
answered Dec 31 '13 at 5:07
Jacob
211
add a comment
up vote
2
down vote
For those of us with login access to our routers, using a script to ask the router what its' WAN IP address is is the most efficient way to determine the external IP address. For instance the following python script prints out the external IP for my Medialink MWN-WAPR300N router:
import urllib, urllib2, cookielib
import re
from subprocess import check_output as co
cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)
def get(url, values=None):
data = None
if values: data = urllib.urlencode(values)
req = urllib2.Request(url, data)
rsp = urllib2.urlopen(req)
return rsp.read()
router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router
get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")
for line in page.split("\n"):
if line.startswith("wanIP = "):
print line.split('"')[1]
exit(1)
Note that this is not very secure (as is the case with plaintext credentials & logging in to most routers), and is certainly not portable (needs to be changed for each router). It is however very fast and a perfectly reasonable solution on a physically secure home network.
To customize the script for another router, I recommend using the tamperdata addon in firefox to determine what HTTP requests to make.
shareimprove this answer
edited Jun 3 '14 at 3:01
answered Mar 27 '14 at 3:08
KarlC
1658
1
You should try getting the IP address of the router grammatically. For example router = subprocess.check_output(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]. – Cristian Ciupitu Jun 2 '14 at 2:26
add a comment
up vote
2
down vote
These will get the local IPs:
ifconfig
or for shorter output:
ifconfig | grep inet
also
ip addr show
and probably:
hostname -I
This should get the external IP
wget http://smart-ip.net/myip -O - -q ; echo
N.B. If you don't mind to installing curl, this as well:
curl http://smart-ip.net/myip
shareimprove this answer
edited Dec 5 '14 at 21:07
answered Jun 27 '14 at 16:08
Wilf
18k55697
ifconfig | sed -nre '/^[^ ]+/{N;s/^([^ ]+).*addr: *([^ ]+).*/\1,\2/p}' will print the local interfaces and corresponding V4 IP's – Hannu Jun 27 '14 at 18:09
ifconfig | sed -nre '/^[^ ]+/{N;N;s/^([^ ]+).*addr: *([^ ]+).*addr: *([^ ]+).*/\1,\2,\3/p}' - v4 and v6 IPs. – Hannu Jun 27 '14 at 18:15
add a comment
up vote
1
down vote
If you have installed lynx in Ubuntu type
lynx bot.whatismyipaddress.com
shareimprove this answer
answered Jan 9 '13 at 12:35
Binny
1113
curl bot.whatismyipaddress.com works too. – Tomofumi Jan 30 '15 at 8:26
add a comment
up vote
1
down vote
use ip!
ip addr show
then look for the relevant adapter (not lo, and usually eth0), and locate the ip address near inet.
shareimprove this answer
answered Aug 15 '16 at 23:06
Eliran Malka
8061534
The question is about public not internal IP addresses – Wolf Oct 22 '16 at 20:24
add a comment
up vote
1
down vote
Many home routers can be queried by UPnP:
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s
Then, grep the ip address from the answer.
grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
shareimprove this answer
answered Sep 18 '16 at 20:45
jms
150112
add a comment
up vote
0
down vote
If you are using DD-WRT then this works for me:
curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
or
curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
Where 192.168.1.1 is the Gateway/Router LAN IP Address of the DD-WRT router.
The -s component means silent (i.e. don't show the curl progress information).
Oh, I should mention that I use the above with "DD-WRT v24-sp2 (01/04/15) std".
shareimprove this answer
edited Apr 14 at 16:27
answered Apr 14 at 16:14
CMP
1213
add a comment
up vote
-1
down vote
A command with no dependencies except 8.8.8.8 being a GOogle DNS:
echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
shareimprove this answer
answered Aug 19 '15 at 7:57
Rolf
1693
This only tells you the IP-address of your local outgoing interface. – guntbert Sep 17 '15 at 16:15
the command does show the public ip address if I run it on a cloud server. wasn;t that the question? – Rolf Sep 17 '15 at 20:48
No, where do you see "cloud server"? – guntbert Sep 17 '15 at 20:52
add a comment
up vote
-2
down vote
Simply issue a traceroute for any website or service..
sudo traceroute -I google.com
Line 2 always seems to be my public IP address after it gets past my router gateway.
user@user-PC ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
1 25.0.8.1 (25.0.8.1) 230.739 ms 231.416 ms 237.819 ms
2 199.21.149.1 (199.21.149.1) 249.136 ms 250.754 ms 253.994 ms**
So, make a bash command.
sudo traceroute -I google.com | awk -F '[ ]' '{ if ( $2 ="2" ) { print $5 } }'
And the output...
(199.21.149.1)
I don't think relying on PHP scripts and the sort is good practice.
shareimprove this answer
answered Jul 24 '15 at 16:34
woahguy
30815
this is interesting, though really slow and doesn't get my external ip like this – rubo77 Oct 5 '15 at 2:46
This answer is too inaccurate to be useful. In my corporate environment I don't get my IP address at all. The only way it works is if you understand how your local routers and switches are crafted, and even then it may not be on line 2 depending on the number of local hops you jump through. There's no way to make a coherent algorithm out of this technique, and there are many other solutions here that are simpler and will get you the proper answer every time. – Mike S Oct 18 '16 at 17:52
While it may work in some special configurations, I have actually never seen my external IP in a traceroute. It is usually either my gateway (if I am not behind NAT), or my router's gateway, but mostly some other router further away. – mivk Feb 14 at 11:52
alias ip='lynx --dump ipecho.net/plain'; – phildobbin Sep 14 at 17:26
@mailinglists35
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment