
Show HN: A simple IP address API - zvanness
http://ipinfo.io/
======
jgrahamc
I use [https://freegeoip.net/](https://freegeoip.net/) which gives you output
in JSON, CSV or XML and has a limit of 10,000 requests per hour. The limit of
1,000 per day on this service is too low.

~~~
Hansi
It's also more accurate, ipinfo.io thinks I'm in Enfield whereas freegeoip.net
accurately identifies that I'm in London.

~~~
willthames
Interesting - freegeoip.net thinks I'm about 30km from Brisbane in the
opposite direction to the side I'm on.

ipinfo.io thinks I'm in Brisbane, which is slightly more accurate (although
also less specific), although still about 25km out.

~~~
girvo
/waves at another Brisbanite on HN

It gets my Location wrongish here on the Gold Coast, but not too far out. We
have huge suburbs though, all of the GeoIP DB's seem to think im in the wrong
suburb, despite having a static IP on Telstra cable.

------
WestCoastJustin
If you are looking to build something like this, check out MaxMind @
[http://www.maxmind.com/en/city](http://www.maxmind.com/en/city)

------
disbelief
I just finished integrating geo IP lookups into an app I'm working on, using a
library that queries a number of the free IP lookup services out there.
Something that I've learned from this is just how hard it is to stay on top of
IP geolocations. Most of the free services use incomplete or outdated
databases, and if you want decent accuracy you probably need to opt for a paid
package from a company who has the resources to track IP address location
changes, and keep their database up to date.

So, I'm wondering, does ipinfo.io maintain their own database, or do they sub-
license someone else's database? If they're maintaining their own, how good
are they at keeping it valid and updated and what is the coverage like?

~~~
Gys
It uses one of the free databases that are available.

Ip address 200.7.52.1 is a good way to check these services. This should
position to the island of Sint Maarten. A serious offering would know that.
The free ones always set the position to Curacao. Just about 900 NM away...

~~~
gesman
This does it correctly:

[http://myip.ms/info/whois/200.7.52.1](http://myip.ms/info/whois/200.7.52.1)

~~~
brg1007
This is the first service I tried in 8 years which returned correctly the
location of an IP that i know physically where it is.

------
zvanness
Guys/gals,

I posted this for a friend:
[https://twitter.com/coderholic](https://twitter.com/coderholic)

He's the guy behind Lighbox.com which Facebook acquired, really awesome guy!

I guess he'll be wondering where all the sudden traffic is coming in from!

~~~
coderholic
Thanks Zach! :)

~~~
zvanness
You're welcome Ben! :)

------
throwaway420
This looks very well done and useful.

Usually though I just use [http://www.moanmyip.com](http://www.moanmyip.com)
for the weirdness of it. Or pretty much any search engine includes that up top
when you search for "ip address".

------
msantos
I use [http://ip-api.com/](http://ip-api.com/) and I find it works great
(docs: [http://ip-api.com/docs/](http://ip-api.com/docs/)).

It provides response formats: xml, json, csv, newline separated, serialized
php. And enforce a limit of 240 requests per minute (that's 14,400 per hour
for the lazy).

Fun fact, if you're running tor (tor-0.2.4.17 as proxy not the browser) you'll
see the tor exit node in "IP:" and your actual ip i "Real IP:", thanks to
gdns' EDNS ([https://gdns.re/edns-demo/](https://gdns.re/edns-demo/))

~~~
dfc
Fun fact: if you are running tor and you see the tor exit node and your IP
_you are doing it wrong_! You are leaking DNS requests. Tor goes to great
lengths informing you that something is wrong in the logs. This is not thanks
to edns, it is thanks to your inability to use the software correctly. Please
see:

[https://trac.torproject.org/projects/tor/wiki/doc/Preventing...](https://trac.torproject.org/projects/tor/wiki/doc/Preventing_Tor_DNS_Leaks)

~~~
msantos
_> it is thanks to your inability to use the software correctly_

I disagree, but have you said it is down to my inability to explain what the
problem is, then I agree.

I'm aware of the DNS leaks, and obviously wasn't clear enough and failed to
explain what the problem was.

The leak only happens when you run the tor proxy daemon, and your own browser
with the appropriate proxy settings.

It's down to the way Firefox, uses the defined proxy for the initial DNS and
HTTP requests, but then bypasses it when doing DNS lookups for JS within the
initial page loaded.

It doesn't leak DNS lookups made by JS scripts if you use the tor version that
includes a mod-Firefox browser.

------
squeed
I don't mean to be a huge jerk - I think the service is cool - but IPv4
exhaustion is months away! All of the major GeoIP vendors have IPv6 support.
It's simultaneously saddening and frustrating that it might as well not exist.

~~~
lsc
For ARIN (where most of us will be getting our IPs) projected runout (assuming
no "bank run") is closer to a year out[1]

Now, people /have/ been predicting some crazy run on IPv4 for some time now, I
was pretty certain it was going to happen in 2011 and while a run is still
quite possible, it hasn't happened yet, and there are a bunch of outstanding
/8s that could very well be returned; the DoD has been returning blocks, and
they still have a bunch more they could return. Based on my own previous
expectation that runout was going to occur in 2011, I'd be surprised if we run
out before 2015.

Now, if you are dealing with network admins and infrastructure types? IPv6 is
very important. I give my customers an IPv6 address by default, and will give
a /64 upon request. It's pretty important for the sort of people I have as
customers.

You see, we're the ones who have to deal with this 'nat hell' \- and make no
mistake about it, it will be hellish.

However, from a business perspective? If you are going after business types?
The internet is still entirely IPv4.

[1][http://www.potaroo.net/tools/ipv4/index.html](http://www.potaroo.net/tools/ipv4/index.html)

------
jfasi
This is interesting. IP address databases are typically bought and sold for
figures in the thousands. This service presumably purchases one or some of
these and attempts to make up the cost by providing it on an as-needed basis.

I wonder if there are any additional data sources that can just be bought
wholesale and sold in pieces? Think of all the applications that needed very
precise IP address data but couldn't afford the whole dataset. They can now
exist!

I could also be wrong and this isn't at all the approach this service takes...

~~~
colmmacc
Maxmind's is free to City/Country level, $90/month for a site license.
[http://www.maxmind.com/en/geolocation_landing](http://www.maxmind.com/en/geolocation_landing)

~~~
Erwin
That's for your own use however, the license says:

Access to the data is restricted to employees and contractors of the license
holder. With contractors, the license holder is liable should the contractors
violate the terms of the agreement.

Data may not be stored in a way that is publicly accessible.

If you wanted to build a public server with that, you would have to use their
per-usage API according to their FAQ:
[http://www.maxmind.com/en/faq#lookuptool](http://www.maxmind.com/en/faq#lookuptool)

~~~
toast0
You can also use their free databases
[http://dev.maxmind.com/geoip/geoip2/geolite2/](http://dev.maxmind.com/geoip/geoip2/geolite2/)
under the Creative Commons Attribution-ShareAlike 3.0 Unported License

~~~
hox
Correct, but the site isn't following the terms of that license.

------
chbrown
About 8 miles less accurate than MaxMind -- 11 miles wrong vs. Maxmind's 3.
I'm always curious: what is the provenance of services like this one / MaxMind
— my ISP? Some past inadvertant GPS-enabled requests that leak out?

------
Phil_Latio
Why would anyone pay for this? Maxmind is the industry standard and way
cheaper.

~~~
hox
And presumably this service is just repackaging such an existing system. My
old company had a tool to figure our what widely used geo db was used for
these services (to properly judge it's value), but I no longer have access to
this tool.

------
zaphoyd
Any plans for IPv6 support?

~~~
coderholic
Absolutely!

------
whitehat2k9
I'm on a campus network that reverse proxies all HTTP traffic. The service
shows my internal 10.x.x.x IP. Just a heads-up that you might want to fix your
handling of X-Forwarded-For headers.

~~~
mike-cardwell
Yeah. Should exclude any of these: 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16 and
the lesser known 172.16.0.0/12

Also, I wonder if it handles X-Forwarded-For headers that contain multiple IP
addresses, because there are multiple levels of proxying taking place.

Also. No IPv6? How boring.

~~~
xxpor
Full list of "special" addresses:
[http://tools.ietf.org/search/rfc3330](http://tools.ietf.org/search/rfc3330)

~~~
xxpor
Or I guess this is the most recent version:
[http://tools.ietf.org/search/rfc6890](http://tools.ietf.org/search/rfc6890)

------
danso
I was going to say that there was a small typo when trying out 127.0.0.1:

"127.0.0.1 is a bogon or private IP address that should not appear on the
Internet."

But then I learned that "bogon' is actually a word:

[http://en.wikipedia.org/wiki/Bogon_filtering](http://en.wikipedia.org/wiki/Bogon_filtering)

And re-reading the sentence, I'm not sure what "bogon" would be a typo for
anyway..."Vogon"? Anyway, good handling of an edge/nonsense case!

------
owenversteeg
Hmm. For me it was off by 20 miles. Not bad considering that most other GeoIP
services get my location off by several hundred miles.

I'll probably be using this. Thanks!

------
angryasian
"city": null, "region": null, "country": "US"

At least it got the US part right.

~~~
coderholic
What's your IP?

------
jfasi
Recommendation: I have the feeling your sales would be significantly boosted
if you added some sort of tiered service plans on top of your free tier,
instead of requiring the frictionful process of reaching out to a sales
address.

~~~
coderholic
Did you see [http://ipinfo.io/pricing](http://ipinfo.io/pricing)? What changes
would you suggest?

~~~
jfasi
Sorry, I somehow missed that site from reading your docs. I'm willing to chalk
this up to my own mistake rather than bad design on your part.

------
mike-cardwell
Noticed this:

JSONP support:
[http://ipinfo.io/?callback=test](http://ipinfo.io/?callback=test)

Paid JSONP support:
[https://ipinfo.io/?callback=test](https://ipinfo.io/?callback=test)

~~~
oneeyedpigeon
Bonus points for checking that the callback function is callable before
calling it!

------
antoncohen
In a shell script you can do:

    
    
        MYIP="`curl -s http://ipinfo.io/ip`"
    

[http://myip.enix.org/REMOTE_ADDR](http://myip.enix.org/REMOTE_ADDR) is
similar.

~~~
ytjohn
My "goto" for shell scripts is [http://echoip.org/](http://echoip.org/),
though I recently setup my own such script as well. It's a one-liner in PHP,
though having some json output alternatives would be useful as well.

------
motyar
[http://ip-api.com/](http://ip-api.com/) provides correct details.
[http://ipinfo.io/](http://ipinfo.io/) showing that I am in US.

~~~
mahmoudhossam
This one correctly detected my city, something the others couldn't do.

Thanks.

------
aabalkan
Doesn't support IPv6 :)

------
brokenparser
A strange site, it doesn't support IP at all:
[http://ip6.nl/#!ipinfo.io](http://ip6.nl/#!ipinfo.io)

It merely does _legacy IP_ , so what's the point?

------
lpgauth
Has anyone done research on quality of geo DB? I've personally prefer Maxmind
because of the format of the DB, but Netacuity seemed to be giving more up to
date results.

------
niklasber
I created a Bash script using this service:
[https://github.com/niklasberglund/ipinfo](https://github.com/niklasberglund/ipinfo)

------
sinzone
Many free IP info APIs:
[https://www.mashape.com/search?query=ip+info](https://www.mashape.com/search?query=ip+info)

------
corford
In my case it was off by 55 miles so the address, lat/lng and postcode were
wrong but other than that ok (my ISP is Andrews and Arnold).

Why not just use Maxmind though?

------
vld
[http://ip-api.com/](http://ip-api.com/) is also a nice alternative, with
JSON, CSV, XML, and others.

------
watson
If the hostname is unknown, the json hostname property should probably be null
instead of the string "No hostname"

------
elbii
It incorrectly states my IP is a Tor exit node when in fact it's just a relay.

I'll go ahead and file an issue with the github lib.

------
colmmacc
zvanness, would you be interested in also implementing this;

    
    
        http://whatsmyresolver.stdlib.net/
        curl -L  http://whatsmyresolver.stdlib.net/resolver/      
    

? It should be relatively easy to add (happy to explain how it works), and I'm
personally longing to turn off my service!

~~~
daemon13
Sorry to intercept, but how does it work?

~~~
mappu
My first guess would be that the domain uses a custom nameserver that logs all
dns queries and serves back a different IP to each user. Then when the http
request comes in to that specific IP, it can check the dns logs to identify
the resolver.

But surely.. that would either require (a) a massive IP space (i guess that
works if the site is IPv6 only), or (b) assuming a pretty short time between
dns lookup and http request, and hence possibly false results if the dns
lookup is cached somewhere and the IP has since been reused

I'd love to know if there's a better way of implementing this.

~~~
0x0
A better way would be to hand each client a unique hostname
(sessionidhere.whatsmyresolver.stdlib.net) and match that dns query to the
http client? For example as an ajax call from the main website.

------
vertex-four
This believes that I am in London. I am most decidedly not in London.

FreeGeoIP thinks I'm in Edinburgh, which is only slightly better.

~~~
gedrap
This believes that I am in Colchester, FreeGeoIP can say that I am just in the
UK, Google in incognito mode thinks that I am in Sheffield. Correct answer:
Manchester :)

------
koloron
"postal" and "loc" are a bit off in my case. My true location is about 6km
away from "loc".

------
lifeeth_
You should probably add -> "add_header Strict-Transport-Security max-
age=31536000;" to your nginx config.

~~~
RKearney
Bad idea. Then anyone who accesses it over HTTPS won't be able to use HTTP
anymore and HTTPS requires a paid plan of some sort.

Ideally they should be on separate domains, at which point HSTS would be more
suited.

~~~
lifeeth_
Paid plan for API access I guess - hoping one wont use the same environment
for both. I meant this for the stripe frame which kicks in, cant really trust
an https frame that has a start from http.

------
doktrin
What's the underlying GeoIP database?

------
mivv
You have a typo on the /developers page. It says client-sde I'm assuming it
should say client-side.

------
NigelTufnel
I'm getting latitude = 60.0000, longitude = 100.0000 for my IP. Which is about
1000 km away from me.

------
seanalltogether
Are you placing all virgin media uk customers in London? I'm in belfast.

~~~
bluedino
As a customer of AT&T in the United States, I often get put in Chiacago or
Kansas. Go figure.

------
jimmytucson
I just like the fact that this could have been called "iPapi".

------
ishener
here is a free, simple, and accurate geolocation service: [http://free-
geolocation.appspot.com/](http://free-geolocation.appspot.com/)

------
natch
Nice... can we have a trailing newline on the JSON?

------
brohee
Complete with completely wrong geolocation...

~~~
coderholic
What's your IP, and (roughly) correct location?

------
tomasien
You just got yourself a customer!

------
gregw134
my-ip.heroku.com is a very simple alternative.

------
limsup
awesome! what technology do you use?

~~~
apierre
Ingredients: Node, Connect, Express on Nginx. *

* Courtesy of Wappalyzer

~~~
coderholic
Yeah, exactly that! I'll have to check out Wappalyzer.

The code is written in coffeescript, and some key npm modules are:

\- [https://github.com/caolan/async](https://github.com/caolan/async)

\- [https://github.com/brycebaril/node-tokenthrottle-
redis](https://github.com/brycebaril/node-tokenthrottle-redis)

\- [https://github.com/rs/node-netmask](https://github.com/rs/node-netmask)

I was at one point using [https://github.com/tjfontaine/node-
dns](https://github.com/tjfontaine/node-dns) for the hostname lookups, but it
was significantly slower that the built in dns module, so I ended up wrapping
that with my own timeout logic.

