Como posso obter minha localização atual / coordenadas por IP a partir da linha de comando?

3

Parece que existe um pacote chamado geoclue que usa o serviço de localização do Mozilla para procurar pontos de acesso sem fio e sua localização conhecida, mas não parece haver uma interface de linha de comando para isso. tem outro jeito de fazer isto? Quaisquer hacks inteligentes?

    
por Mike McKay 06.03.2014 / 09:39

5 respostas

4

Se você quiser pesquisa baseada em IP ... (mas você terá que corrigir o formato HTML da saída)

wget http://cqcounter.com/whois/my_ip_address.php && egrep "IP Location|City|Latitude|Longitude" my_ip_address.php
    
por philshem 06.03.2014 / 14:27
1

Para obter sua localização por IP, você pode usar:

curl -s http://whatismycountry.com/ | sed -n 's|.*> *\(.*\)</h3>||p'

Para obter suas coordenadas por IP, você pode usar:

curl -s http://whatismycountry.com/ | sed -n 's/.*Coordinates \(.*\)<.*//p'
    
por Radu Rădeanu 07.03.2014 / 14:57
1

Aqui está a minha melhor resposta, que experimenta todos os diferentes provedores de geociência disponíveis no Ubuntu:

apt-get install geoclue geoclue-ubuntu-geoip python-geoclue geoclue-yahoo geoclue-plazes geoclue-localnet geoclue-gypsy

echo "#!/usr/bin/env python

import Geoclue

providers = 'Gypsy, Hostip, Localnet, Plazes, Skyhook, Yahoo, Ubuntu GeoIP'
providers = providers.split(', ')
for provider in providers:

  POS_PROVIDER = provider

  location = Geoclue.DiscoverLocation()
  location.init()
  location.set_position_provider(POS_PROVIDER)
  position = location.get_location_info()

  print provider
  print position['latitude']
  print position['longitude']
" > location.py

python location.py

Isso resulta em:

Gypsy
0.0
0.0
Hostip
39.8121
-76.9837
Localnet
39.8121
-76.9837
org.freedesktop.DBus.GLib.UnmappedError.GeoclueErrorQuark.Code1: Could not understand reply from server
Plazes
39.8121
-76.9837
org.freedesktop.DBus.GLib.UnmappedError.GeoclueErrorQuark.Code1: Couldn't parse response from web service
Skyhook
39.8121
-76.9837
Yahoo
39.8121
-76.9837
Ubuntu GeoIP
40.6501
-73.9496

O que é um grande passo à frente, mas parece que todos os provedores estão usando a pesquisa baseada em IP, e minha VPN rejeita totalmente isso. Parece que deve haver um provedor que use apenas pontos de acesso Wi-Fi, mas ainda não o encontrei.

    
por Mike McKay 07.03.2014 / 07:34
0

Aqui está um script Python 2.x similar ao postado por @Mike McKay, que usará todos os provedores Geoclue disponíveis e exibirá suas informações de localização em um formato bem impresso (requer apt-get install python-geoclue ):

#!/usr/bin/env python

from __future__ import print_function
import Geoclue
from datetime import datetime

print("Geoclue version %s" % Geoclue.VERSION)

dl = Geoclue.DiscoverLocation()
dl.init()
providers = dl.get_available_providers()

for provider in providers:
  pname = provider['name']
  dl.set_position_provider(pname)
  position = dl.get_location_info()

  print("\n%s\n%s" % (pname, "-"*len(pname)))
  for k, v in position.items():
    if k.endswith('_timestamp'):
      v = datetime.fromtimestamp(v)
    print("%-25s%s" % (k+':',v))
    
por Dan 29.11.2016 / 18:53
-1

Existe uma solução alternativa que utiliza o seu IP e localiza a sua localização com base no seu IP Real.

primeiro instale o lnyx

sudo apt-get install lynx-cur

Agora o comando é:

lynx -dump http://www.ip-adress.com/ip_tracer/?QRY=$1|grep address|egrep 'city|state|country'|awk '{print $3,$4,$5,$6,$7,$8}'|sed 's\ip address flag \'|sed 's\My\'
    
por Maythux 07.03.2014 / 07:46