Lookup ip geolocalização via linha de comando

2

Estou tentando criar um script rápido e sujo para retornar a geolocalização de vários endereços IP.

Estou usando freegeoip.net e não consegui encontrar um wget equivalente para a linha cmd, então usei um script powershell para isso, chamando-o do meu batchfile (ou pelo menos, tentando, e acho que é onde estou falhando).

A linha de comando é:

for /F "tokens=* usebackq delims=" %a in ("E:\DATA.ips.txt") do (
set /a N+=1
 powershell -command "E:\DATA\Resources\geolocation.ps1 %a"
)

(a primeira linha precisa ser ignorada como contém o cabeçalho, não um IP)

a geolocalização.ps1 é:

wget freegeoip.net/csv/$args[0] -OutFile "E:\DATA\IPs\$args[0].txt"

Espero que isso me forneça uma pasta dos CSVs retornados para cada IP, que eu posso então agrupar em um arquivo com uma cópia E: \ DATA \ IPs * .txt alltheips.txt e esse arquivo será então carregado em outro aplicativo para uso.

Esse (evidentemente) hash é misturado a partir do que eu pesquisei e peguei aqui e ali, mas, (claramente) eu realmente não sei o que estou fazendo aqui, então qualquer ajuda na peça que faltava seria grato!

Em suma, o que eu estou depois, está tomando minha lista de endereços IP (eu tenho um arquivo de texto que tem um cabeçalho e, em seguida, cada linha é um novo IP, os arquivos é de x comprimento e irá variar em cada run - ocasionalmente estará vazio, então seria útil se eu pudesse verificar o tamanho do arquivo e se ele apenas contém o cabeçalho para pular o processo). Verifique esses IPs em relação ao freegeoip.net e reúna os dados que eles fornecem em um arquivo para usar em um programa que associe a localização dos usuários a outros dados que possuo sobre eles através do IP.

Felicidades!

    
por le__bon 30.08.2016 / 10:45

2 respostas

1

Coloque o script inteiro no script. Não há necessidade de envolver o PowerShell em um arquivo em lotes, neste caso. Na verdade, você perde muito ao fazer isso, já que o PowerShell é orientado a objetos.

# for the filename, this is a string
# quotes needed if there's a space, 
# use single quotes unless the string is an expression which needs evaluation
#
# Import-CSV builds an array of objects from the contents of the csv
# using the first row as a header
# in your case the objects will be strings which are IP addresses
# 
# For your own benefit, make sure the ip address column 
# (only one columnt per your post) has a simple title in the first row

$IPList = Import-CSV E:\DATA.ips.txt 

# the Foreach command is a for loop used with arrays or collections to loop through all the members

Foreach ($IPAddress in $IPList) {
    # In PowerShell, wget is an alias for Invoke-WebRequest
    # the $() wrapper around the $IPAddress.ipaddress is to force evaluation of that expression
    Invoke-WebRequest "freegeoip.net/csv/$($IPAddress.ipaddress)" -OutFile "E:\DATA\IPs\$($IPAddress.ipaddress).txt"
    }
    
por 30.08.2016 / 19:52
-1

Aqui está um arquivo em lote que eu codifiquei e que faz uma consulta por IP usando a API do ipinfo.io. link Aproveite!

    
por 25.07.2017 / 17:25