10 ms·
Show HN: A simple IP address API
- whitehat2k9 13y agoI'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.
- jbverschoor 13y agoThat's a normal / forward proxy (transparent most likely)
- whitehat2k9 13y agoYou're absolutely right. I've being setting up too many nginx instances lately and the term stuck in my head...
- mike-cardwell 13y agoYeah. 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.
- coderholic 13y agoThanks for reporting! You should see that we correctly detect this as a bogon, but we should definitely be pulling the correct IP from the headers. I'll look into this. $ curl ipinfo.io/10.0.0.1 { "ip": "10.0.0.1", "hostname": "No Hostname", "loc": "", "bogon": true }
- limsup 13y agoawesome! what technology do you use?
- apierre 13y agoIngredients: Node, Connect, Express on Nginx. * * Courtesy of Wappalyzer
- coderholic 13y agoYeah, 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.
- zvanness 13y agoGuys/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 13y agoThanks Zach! :)
- zvanness 13y agoYou're welcome Ben! :)
- WestCoastJustin 13y agoIf you are looking to build something like this, check out MaxMind @ http://www.maxmind.com/en/city http://www.maxmind.com/en/city
- throwaway420 13y agoThis 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".
- angryasian 13y ago"city": null, "region": null, "country": "US" At least it got the US part right.
- coderholic 13y agoWhat's your IP?
- mike-cardwell 13y agoNoticed 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 13y agoBonus points for checking that the callback function is callable before calling it!
- zaphoyd 13y agoAny plans for IPv6 support?
- coderholic 13y agoAbsolutely!
- jfasi 13y agoThis 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...
- nly 13y ago> IP address databases are typically bought and sold for figures in the thousands. And presumably, therefore, issued under licenses that forbid you from starting a query service? I'm pretty sure most of these IP data providers will offer their own on-demand query services
- colmmacc 13y agoMaxmind'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 13y agoThat'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
- hox 13y agoThis really looks like maxmind city level, so... until we get confirmation from the dev on what db it is, assume this service can disappear at any moment due to license issues.
- jfasi 13y agoRecommendation: 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 13y agoDid you see http://ipinfo.io/pricing http://ipinfo.io/pricing? What changes would you suggest?
- brohee 13y agoComplete with completely wrong geolocation...
- coderholic 13y agoWhat's your IP, and (roughly) correct location?
- owenversteeg 13y agoHmm. 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!
- koloron 13y ago"postal" and "loc" are a bit off in my case. My true location is about 6km away from "loc".
- jgrahamc 13y agoI 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.
- shortstuffsushi 13y agoOut of curiosity, what are you doing that requires that many IP lookups?
- jqueryin 13y agoTracking visitors/customers comes to mind. Definitely not uncommon to have 1000 uniques a day :)
- shortstuffsushi 13y agoSo something along the lines of tracking incoming requests, then doing a DNS lookup on the incoming IP? Isn't that something that something like Google Analytics could do for you? And in that case, would this be more for people who are avoiding GA?
- dudus 13y agoGoogle Analytics can give you this data in the reports but won't allow you to get access to it in real time in your application. Imagine you want to redirect users to the correct country page in your site. In this case you need to get access to the ip geolocation in real time. GA won't help you there.
- watson 13y agoIf your goal is geo-redirection then a 3rd party service is usually a bad choice (speed + downtime). An memory geo-ip database is the best way to go - but this is usually also part of what you pay for when you buy the non-free version
- danso 13y agoI 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!
- vertex-four 13y agoThis believes that I am in London. I am most decidedly not in London. FreeGeoIP thinks I'm in Edinburgh, which is only slightly better.
- oneeyedpigeon 13y agoYou're in ... Newcastle?
- gedrap 13y agoThis 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 :)
- techmatters 13y agoAnd this believes I'm in Liverpool; FreeGeoIP thinks I'm in London, but I'm in Sussex.
- doktrin 13y agoWhat's the underlying GeoIP database?
- colmmacc 13y agozvanness, 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 13y agoSorry to intercept, but how does it work?
- mappu 13y agoMy 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 13y agoA 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.
- vld 13y agocurl $(</dev/urandom tr -dc a-z|head -c32).mydns.re
- Phil_Latio 13y agoWhy would anyone pay for this? Maxmind is the industry standard and way cheaper.
- hox 13y agoAnd 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.
- disbelief 13y agoI 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 13y agoIt 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...
- msumpter 13y agoI was trying to figure out which database they were using as well. I've checked their results for my IP address against the results from MaxMind's GeoIP City and GeoIP2 City service and these return the closet results related to the Latitude/Longitude displayed on ipinfo.io, it also has a matching zip code. The network name differs since I'm on U-Verse but I think they are just displaying the company name from the ASN. I also checked Quova/Neustar and the results are vastly different.
- aabalkan 13y agoDoesn't support IPv6 :)
- lifeeth_ 13y agoYou should probably add -> "add_header Strict-Transport-Security max-age=31536000;" to your nginx config.
- RKearney 13y agoBad 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_ 13y agoPaid 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.
- seanalltogether 13y agoAre you placing all virgin media uk customers in London? I'm in belfast.
- bluedino 13y agoAs a customer of AT&T in the United States, I often get put in Chiacago or Kansas. Go figure.
- mivv 13y agoYou have a typo on the /developers page. It says client-sde I'm assuming it should say client-side.
- corford 13y agoIn 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?
- sinzone 13y agoMany free IP info APIs: https://www.mashape.com/search?query=ip+info https://www.mashape.com/search?query=ip+info
- watson 13y agoIf the hostname is unknown, the json hostname property should probably be null instead of the string "No hostname"
- vld 13y agohttp://ip-api.com/ http://ip-api.com/ is also a nice alternative, with JSON, CSV, XML, and others.
- lpgauth 13y agoHas 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.
- msantos 13y agoI 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/)
- ianhawes 13y agoIs there an API for this?
- msantos 13y agothe geo ip API can be found at http://ip-api.com/docs/home http://ip-api.com/docs/home and as for the geo-DNS check https://gdns.re/ https://gdns.re/
- dfc 13y agoFun 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_Tor_DNS_Leaks https://trac.torproject.org/projects/tor/wiki/doc/Preventing...
- msantos 13y ago>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.
- antoncohen 13y agoIn 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 13y agoMy "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.
- squeed 13y agoI 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 13y agoFor 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
- jimmytucson 13y agoI just like the fact that this could have been called "iPapi".
- ishener 13y agohere is a free, simple, and accurate geolocation service: http://free-geolocation.appspot.com/ http://free-geolocation.appspot.com/
- gregw134 13y agomy-ip.heroku.com is a very simple alternative.
- elbii 13y agoIt 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.
- motyar 13y agohttp://ip-api.com/ http://ip-api.com/ provides correct details. http://ipinfo.io/ http://ipinfo.io/ showing that I am in US.
- mahmoudhossam 13y agoThis one correctly detected my city, something the others couldn't do. Thanks.
- tomasien 13y agoYou just got yourself a customer!
- chbrown 13y agoAbout 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?
- NigelTufnel 13y agoI'm getting latitude = 60.0000, longitude = 100.0000 for my IP. Which is about 1000 km away from me.
- brokenparser 13y agoA 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?
- natch 13y agoNice... can we have a trailing newline on the JSON?
- niklasber 13y agoI created a Bash script using this service: https://github.com/niklasberglund/ipinfo https://github.com/niklasberglund/ipinfo