Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- # Deasupra e o linie care transforma scriptul in executabil.
- # Importam module standard pt. expresii regulate si parsat URLuri.
- import json
- import re
- import urllib
- import urlparse
- # Importam module terte pt. citire URL si parsare continut HTML.
- import requests
- from bs4 import BeautifulSoup as BS
- def get_myip():
- # Adresa de la care scoatem IP-ul nostru din continutul paginii.
- url = "http://ipv4.icanhazip.com"
- resp = requests.get(url)
- ip = resp.text.strip()
- return ip
- def get_ip_details(ip):
- # Extragem si afisam niste detalii interesante despre IP-ul dat ca parametru.
- url = "https://ip-info.org/?language=en&info=91.202.90.119"
- # Se vede clar cum adresa de mai sus poate fi templetizata mai greoi, asa ca
- # avem mai jos o metoda mult mai generica pt. orice fel de modificare pe adrese
- # ce iti vor putea fi utile in cazul in care manipulezi URL-uri (cu urlparse)
- # Sparge url-ul, oricare ar fi el, in bucati bine cunoscute.
- split = list(urlparse.urlsplit(url))
- print("Inainte: {}".format(split)) # afisare pt. a vedea cum arata si la ce e buna treaba asta
- # Iei query-ul (adica parametrii aia dupa semnul "?") si-l faci un dictionar.
- new_query = dict(urlparse.parse_qsl(split[3]))
- # Acum hai sa inlocuim ip-ul ala de mai sus cu cel dat ca parametru.
- new_query.update({
- "info": ip
- })
- # Fa din dictionarul abia actualizat un string query la loc (cum era si inainte,
- # numai ca acum contine IP-ul modificat).
- split[3] = urllib.urlencode(new_query)
- # Transforma noul split actualizat (cu noul query cu IP modificat) inapoi intr-un URL
- # in acelasi format ca si inainte.
- url = urlparse.urlunsplit(split)
- print("Dupa: " + url)
- # De asemenea, se pot modifica si alte campuri din `split`.
- # Acum ca avem un URL cu ip-ul nostru, cere informatii despre el.
- resp = requests.get(url)
- resp.raise_for_status() # nu e nevoie, insa asta verifica daca nu da eroare
- data = resp.text # si aici avem continutul HTML
- # Aici e partea interesanta: vom parsa cu BS continutul si vom extrage niste detalii
- # de interes.
- soup = BS(data, "html5lib")
- # Selectam tabelul de interes (ca primul rezultat care urmeaza regula de mai jos).
- table = soup.find(
- "table",
- style="border-style: solid;border-width: 1px;"
- )
- print("Tabel: \n{}".format(table))
- # Si acum din acel tabel scoatem niste informatii faine cu expresii regulate.
- # (poti folosi: https://regexr.com ca sa le verifici la mana).
- matches = re.findall(r"<td[^>]*?>([^<]*?)</td>", str(table))
- indexes = {
- "isp": 7,
- "host": 10,
- }
- details = {}
- for key, idx in indexes.items():
- details[key] = matches[idx]
- return details
- # Functia principala care face mai multe lucruri.
- def main():
- # 1. Scoatem si afisam IP-ul curent.
- ip = get_myip()
- print("IP: {}".format(ip))
- # 2. Bagam acel IP intr-un serviciu de identificare si le afisam ordonat.
- details = get_ip_details(ip)
- print(json.dumps(details, indent=4))
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement