Назад | Перейти на главную страницу

Поиск геолокации IP через командную строку

Я пытался собрать быстрый и грязный сценарий, чтобы вернуть геолокацию группы IP-адресов.

Я использую freegeoip.net и не могу найти быстрый эквивалент wget для строки cmd, поэтому использую для этого сценарий powershell, вызывая его из моего пакетного файла (или, по крайней мере, пытаясь, и я думаю, что здесь я терплю неудачу).

Командная строка:

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

(первую строку нужно пропустить, поскольку она содержит заголовок, а не IP-адрес)

geolocation.ps1:

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

Я надеюсь, что это даст мне папку с возвращенными CSV для каждого IP, которую я затем могу сопоставить в один файл с копией E: \ DATA \ IPs * .txt alltheips.txt, и этот файл затем будет загружен в другой приложение для использования.

Этот (очевидно) хеш - это пюре из того, что я нашел в Google и нашел здесь и там, но (ясно) я на самом деле не знаю, что я здесь делаю, поэтому любая помощь в недостающем фрагменте будет благодарна!

Короче говоря, то, что мне нужно, - это взять мой список IP-адресов (у меня есть текстовый файл с заголовком, а затем каждая строка представляет собой новый IP-адрес, файлы имеют длину x и будут меняться при каждом запуске - иногда он будет пустым, поэтому было бы удобно, если бы я мог проверить длину файла, и если он просто содержит заголовок, чтобы пропустить процесс). Сравните эти IP-адреса с freegeoip.net и сопоставьте данные, которые они предоставляют, в один файл для использования в программе, которая будет связывать местоположение пользователей с другими данными, которые я храню о них через IP.

Ура!

Поместите весь сценарий в сценарий. В этом случае не нужно упаковывать PowerShell в пакетный файл. На самом деле при этом вы многое теряете, поскольку PowerShell объектно-ориентирован.

# 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\02.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"
    }

Вот кодированный мной командный файл, который выполняет поиск IP-адресов с помощью API ipinfo.io. https://pastebin.com/Ucs2Kuqn Наслаждайтесь!