Python для хакера. Часть 3. Сбор информации об IP и пробиваем номер сотового
@webwareCiao, дорогие участники нашего форума) Давненько от меня не выходило статей. Но это все по тому, что я совместно с @BadBlackHat и @r0hack создаем курс по веб пентесту. Думаю вам понравится. А теперь перейдем непосредственно к сути. Сегодня, мы напишем 2 не больших скрипта на Python, которые не много облегчат вам сбор информации. Первый скрипт получает информацию об IP, а второй не много о номере сотового.
[1] - Сбор информации об IP.
Для начала определимся с тем, какую информацию хотим получить. В основном, это будет город, страна, континент (а вдруг) и провайдер. Также не плохо было бы получить информацию whois. Для написания нашего скрипта, я составил простенький алгоритм.
1. Взять на вход IP адрес 2. Составить URL адрес по типу: http://ipinfo.io/<IP>/json 3. Запросить JSON данные обратившись по этому адресу 4. Изменяем из JSON формата в словарь на языке Python 5. По средством Python выполним команду в терминале whois <IP> 6. Прочтем данные из пункта выше 7. В читабельном виде выведем полученную информацию
Для начала разберемся с сервисом ipinfo.io - он предоставляет нам информацию об указанном вами IP адресе. Но что же такое JSON? Это всего то один из способов ранения данных. Мы же этот способ переформируем в словарь. Чтобы лучше понять, давайте пропишем в адресной строке вашего браузера следующий URL
https://ipinfo.io/101.50.1.2/json
Прописав этот URL, вы как будто говорите серверу "Предоставь мне информацию об IP адресе 101.50.1.2 в виде JSON". Данный IP является прокси сервером.

Так вот, когда мы из JSON переформируем данные в словарь, то чтобы получить, например информацию о городе, существует ключ "city". Более обширная информация о регионе, то ключ "region". Надеюсь, что на этом моменте все понятно. Приступим к написанию непосредственно кода.
Первым делом импортируем необходимые библиотеки. Мы воспользуемся библиотеками json - для обработки информации, urllib.request - для отправки запросов на ресурс и получении данных и os - для выполнения команд в терминале Linux.
import urllib.request import json import os
Теперь же, нам необходимо запросить у пользователя IP адрес, о котором собственно и будет собрана информация.
getIP = input("[+] Enter IP --> ")
Составляем необходимый URL, дабы в дальнейшем запросить с него информацию.
url = "https://ipinfo.io/" + getIP + "/json"
Запрашиваем информацию и записываем ее в переменную getInfo. Но, для выявления ошибок, заключаем наш запрос в конструкцию try --> except
try:
getInfo = urllib.request.urlopen( url )
except:
print( "\n[!] - IP not found! - [!]\n" )
Как раз, после выполнения данной строки, если IP был найден в базе сайта и мы корректно подключились к нему, нужно преобразовать данные из JSON в словарь. Для этого воспользуемся опять таки одной строкой))
infoList = json.load(getInfo)
Данные получены, но не спешите выводить всю информацию, это мы сделаем в последнюю очередь. А теперь получаем whois информацию. Здесь все еще проще.
myComand = "whois " + getIP whoisInfo = os.popen( myComand ).read()
После того, как мы собрали всю информацию, нам необходимо красиво вывести ее.
print( "-" * 60 ) print( "IP: ", infoList["ip"] ) print( "City: ", infoList["city"] ) print( "Region: ", infoList["region"] ) print( "Country: ", infoList["country"] ) print( "Hostname: ", infoList["hostname"] ) print( "-" * 60 ) print( whoisInfo ) print( "-" * 60)
Код я не много видоизменил и "продекорировал". Вот, что получилось в итоге
import urllib.request
import json
import os
getIP = input("[+] Enter IP --> ")
url = "https://ipinfo.io/" + getIP + "/json"
try:
getInfo = urllib.request.urlopen( url )
except:
print( "\n[!] - IP not found! - [!]\n" )
infoList = json.load(getInfo)
def whoisIPinfo(ip):
try:
myComand = "whois " + getIP
whoisInfo = os.popen( myComand ).read()
return whoisInfo
except:
return "\n [!] -- Error -- [!] \n"
print( "-" * 60 )
print( "IP: ", infoList["ip"] )
print( "City: ", infoList["city"] )
print( "Region: ", infoList["region"] )
print( "Country: ", infoList["country"] )
print( "Hostname: ", infoList["hostname"] )
print( "-" * 60 )
print( whoisIPinfo ( getIP ) )
print( "-" * 60)

[2] - Пробиваем номер сотового.
Здесь, все строиться практически на таком же алгоритме. За исключением whois))) В число интересующей нас информации входит город, страна, сотовый оператор.
Брать информацию мы будем в виде JSON. Для начала, посмотрим на ее "внешний вид". Для этого пропишите какой-либо номер используя следующий URL.
https://htmlweb.ru/geo/api.php?json&telcod=<ТЕЛЕФОН>
Я возьму телефон с ресурса onlinesim.

Думаю, что при конвертации этого из JSON получится многомерный словарь)) Т.е. нужно будет использовать ключи 2 раза. Например словарь[key1][key2]
Приступим конечно же к кодингу. Ничего не меняется, мы импортируем все те же библиотеки, за исключением os.
import urllib.request import json
Далее, запрашиваем у пользователя номер сотового телефона
phone = input("Enter phone: ")
Формируем URL для запроса
getInfo = "https://htmlweb.ru/geo/api.php?json&telcod=" + phone
Запрашиваем у ресурса информацию о сотовом в json формате
try:
infoPhone = urllib.request.urlopen( getInfo )
except:
print( "\n[!] - Phone not found - [!]\n" )
Из полученной информации, которая храниться в виде json создаем многомерный словарь)
infoPhone = json.load( infoPhone )
И, конечно, красиво выводим все полученную информацию.
print( u"Номер сотового --->", "+" + phone ) print( u"Страна ---> ", infoPhone["country"]["name"] ) print( u"Регион ---> ", infoPhone["region"]["name"] ) print( u"Округ ---> ", infoPhone["region"]["okrug"] ) print( u"Оператор ---> ", infoPhone["0"]["oper"] ) print( u"Часть света ---> ", infoPhone["country"]["location"] )
На вход программе давайте номер сотового, но без +

А на этом, друзья, все)
P.S: А не начать ли нам, в следующей части, писать свой сканер web - ресурсов, для сбора информации?