Ciao, дорогие участники нашего форума) Давненько от меня не выходило статей. Но это все по тому, что я совместно с @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.
Python:
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 — ресурсов, для сбора информации?
Improve Article
Save Article
Improve Article
Save Article
In this article, you will learn how you can get the information about phone number like the country name to which the phone number belongs to, or the network service provider name of that phone number just by writing a simple Python program. Python provides a module name phonenumbers for this task. This article is Python’s port of Google’s libphonenumber library.
Installation
Install the package phonenumbers
using the below command in your command prompt.
pip install phonenumbers
Example 1: Python program to get the country name to which phone number belongs:
import
phonenumbers
from
phonenumbers
import
geocoder
phone_number
=
phonenumbers.parse(
"Number with country code"
)
print
(geocoder.description_for_number(phone_number,
'en'
))
Output:
India
Example 2: Python program to get the service provider name to that phone number
import
phonenumbers
from
phonenumbers
import
carrier
service_provider
=
phonenumbers.parse(
"Number with country code"
)
print
(carrier.name_for_number(service_provider,
'en'
))
Output:
Airtel
Improve Article
Save Article
Improve Article
Save Article
In this article, you will learn how you can get the information about phone number like the country name to which the phone number belongs to, or the network service provider name of that phone number just by writing a simple Python program. Python provides a module name phonenumbers for this task. This article is Python’s port of Google’s libphonenumber library.
Installation
Install the package phonenumbers
using the below command in your command prompt.
pip install phonenumbers
Example 1: Python program to get the country name to which phone number belongs:
import
phonenumbers
from
phonenumbers
import
geocoder
phone_number
=
phonenumbers.parse(
"Number with country code"
)
print
(geocoder.description_for_number(phone_number,
'en'
))
Output:
India
Example 2: Python program to get the service provider name to that phone number
import
phonenumbers
from
phonenumbers
import
carrier
service_provider
=
phonenumbers.parse(
"Number with country code"
)
print
(carrier.name_for_number(service_provider,
'en'
))
Output:
Airtel
Система проверки сайта не принимает решение, пожалуйста подскажите где ошибка.
Собственно задача:
1002.Телефонные номера
Ограничение времени: 2.0 секунды
Ограничение памяти: 64 МБ
В современном мире вы встречаетесь с огромным количеством телефонных номеров,
которые со временем становятся всё длиннее и длиннее. И вам приходится
запоминать эти номера. Одним из простых способов запоминания является сопоставление
букв каждой цифре, как показано на следующем рисунке:
1 ij 2 abc 3 def
4 gh 5 kl 6 mn
7 prs 8 tuv 9 wxy
0 oqz
Таким образом, каждому слову или группе слов может быть сопоставлен уникальный номер,
так что можно запоминать слова вместо телефонных номеров. Очевидно, есть особый шарм в том,
чтобы найти простую взаимосвязь между словом, используемым для запоминания телефонного номера,
и владельцем этого номера. Так, телефонный номер 941837296 вашего друга, играющего в шахматы,
может быть прочитан как WHITEPAWN (белая пешка), а номер 2855304 Вашего любимого учителя
может быть прочитан как BULLDOG (бульдог).
Напишите программу, находящую самую короткую последовательность слов
(имеющую наименьшее количество слов), которая соответствует заданному номеру телефона и
заданному списку слов. Соответствие описано на рисунке выше.
Исходные данные
Ввод состоит из набора тестов. Первая строка каждого теста содержит номер телефона,
к которому нужно подобрать мнемонику. Номер состоит не более чем из 100 цифр.
Вторая строка содержит общее количество слов в словаре (максимум 50 000).
Каждая из оставшихся строк содержит одно слово,
состоящее не более чем из 50 строчных латинских букв.
Общий размер ввода не превосходит 300 килобайт.
Последняя строка ввода содержит число −1.
Результат
Каждая строка вывода должна содержать кратчайшую последовательность слов, найденную вашей программой.
Слова должны быть разделены одиночными пробелами. Если для входных данных нет решения, соответствующая
строка вывода должна содержать текст No solution.
.
Если существует несколько решений, имеющих одинаковое количество слов, можете выбрать любое из них.
Ввод и вывод данные авторами для примера:
7325189087
5
it
your
reality
real
our
4294967296
5
it
your
reality
real
our
-1
# Ожидаемый результат
reality our
No solution.
Мои вводные для теста:
2272583262772
11
ba
ra
ku
k
ss
u
ma
da
m
a
ssa
-1
По логике ответ должен быть
ba ra ku da ma ssa
Но это решение почему-то в список возможных не попадает.
Причем если ma
расположить после da
то это решение находится.
Вот список решений из которых идет выбор оптимального:
['ba', 'ra', 'ku', 'da', 'm', 'a', 'ss', 'a']
['a', 'a', 'ra', 'ku', 'da', 'm', 'a', 'ss', 'a']
И соответственно оптимальным код считает:
ba ra ku da m a ss a
Ну и соответственно валидатор не принимает это решение.
Подскажите пожалуйста где косяк
Мое решение:
keyboard = {'1': 'ij', '2': 'abc', '3': 'def',
'4': 'gh', '5': 'kl', '6': 'mn',
'7': 'prs', '8': 'tuv', '9': 'wxy',
'0': 'oqz'}
while True:
phone_num = input()
solutions = []
if phone_num == '-1':
break
phone_len = len(phone_num)
words = [input() for _ in range(int(input()))]
collector = []
for word in words:
if len(word) > phone_len:
continue
solution = []
for i in range(len(word)):
if word[i] not in keyboard[phone_num[i]]:
break
else:
solution.append(word)
test_solution = []
while test_solution != solution:
test_solution = solution.copy()
raw_solution = ''.join(solution)
len_solution = len(raw_solution)
new_words = [item for item in words if len(item) <= phone_len - len_solution]
if new_words:
for item in new_words:
raw_solution = ''.join(solution)
len_solution = len(raw_solution)
test_string = raw_solution + item
len_test_string = len(test_string)
if len_test_string > phone_len:
continue
for s in range(len_solution, len_test_string):
if test_string[s] not in keyboard[phone_num[s]]:
break
else:
solution.append(item)
solutions.append(solution)
if solutions:
solutions.sort(key=lambda g: len(g))
print(*solutions[0])
else:
print('No solution.')
In this tutorial, we’ll look at how to get phone number information in Python. The name ‘phonenumbers’ refers to an extremely fascinating and handy library. And that’s the library that will help us have some fun with Phone numbers in Python.
We will be utilizing the phonenumbers library to obtain information about a phone number. Let’s go deeper into this lesson to learn more about it.
To begin, run the following line on your command prompt to install the phonenumbers library.
Convert String to phonenumber format
To investigate the functionalities of the phonenumbers module, we must first obtain a user’s phone number in phonenumber format. In this section, we’ll look at how to convert a user’s phone number to phonenumber format.
The input must be of the string type, and the country code must come before the phone number.
import phonenumbers pN = phonenumbers.parse("+919876643290") print(pN)
Country Code: 91 National Number: 9876643290
Get Timezone
Here is a simple Python program that uses the phonenumbers module to determine the timezone of a phone number.
First, we convert the string input to phone number format, and then we utilize an inbuilt method to determine a user’s timezone. It only returns results for valid numbers.
import phonenumbers from phonenumbers import timezone pN = phonenumbers.parse("+919876643290") tZ = timezone.time_zones_for_number(pN) print(tZ)
Extract phone numbers from text
Using this module, we can extract phone numbers from text/paragraphs. You may iterate through it to get a list of phone numbers. The PhoneNumberMatcher object offers the necessary method for this.
import phonenumbers T = "Contact us at +919876643290 or +14691674587" N = phonenumbers.PhoneNumberMatcher(T, "IN") for n in N: print(n)
PhoneNumberMatch [14,27) +919876643290
Carrier and Region of a Phone Number
We will learn how to use the geocoder and carrier functionalities of this module to determine the carrier and area of a phone number.
import phonenumbers from phonenumbers import geocoder, carrier pN = phonenumbers.parse("+919876643290") C = carrier.name_for_number(pN, 'en') R = geocoder.description_for_number(pN, 'en') print(C) print(R)
Conclusion
Congratulations! You just learned how to get Phone Number Information in Python. Hope you enjoyed it! 😇
Liked the tutorial? In any case, I would recommend you to have a look at the tutorials mentioned below:
- Python: Convert Number to Words
- Convert a number to words [digit by digit] in Python
- 3 Easy Methods to Find the Smallest Number in Python
Thank you for taking your time out! Hope you learned something new!! 😄