PK!=Daaipfromwebpage/__init__.py# -*- coding: utf-8 -*- """Top-level package for ipfromwebpage.""" from .ipfromwebpage import * PK! Vipfromwebpage/ipfromwebpage.py#!/usr/bin/env python3 import argparse import re import sys from urllib.parse import urlparse from urllib.request import urlopen import bs4 import netaddr def check_args(args=None): parser = argparse.ArgumentParser(description="IP Webpage Scraper") parser.add_argument('url', type=argparse_url_type, help="URL to scrape, must be FQDN ie https://example.com") return parser.parse_args(args) def argparse_url_type(url_to_check): """ This is a helper function that wires check_args to validate_url :param url_to_check: The URL positional argument passed from argparse :return: Value if okay, otherwise raises argparse exception """ result = validate_url(url_to_check) if result: return url_to_check else: raise argparse.ArgumentTypeError( "{} is an invalid URL, must specify fqdn, ex. https://www.example.com".format(url_to_check)) def validate_url(url_arg): """ Takes string input and validates url refers to a valid webpage for passing into other functions :param url_arg: URL to check for validation :return: Boolean result of validation check """ parse = urlparse(url_arg) if parse.scheme not in ['http', 'https']: return False if '.' not in parse.netloc: return False return True def get_webpage_text(url_input): """ Extracts text of webpage and returns :param url_input: Fully-qualified webpage url to get contents of :return: Text of webpage """ data = bs4.BeautifulSoup(urlopen(url_input), 'html.parser').get_text() return data def validate_ip(ip): """ Validates if passed string is an ipv4 or ipv6 address or network. :param ip: IP Address as string :return: Boolean Result """ try: if '/' in ip: netaddr.IPNetwork(ip) else: netaddr.IPAddress(ip) return True except netaddr.AddrFormatError: return False def ip_from_string(string): """ Takes a string and extracts all valid IP Addresses as a SET of Strings Uses the validate_ip helper function to achieve. :param string: Any string of data :return: IP Addresses as a netaddr.IPSet or empty netaddr.IPSet if none found """ ip_regex = re.compile('(? 3h}Fv+TO*ſ?)RJ!9dՒc }b-p!趢Z5g q6fOq{v}l [hQι|7R*a!߽{@Y(Q(Z׼)m ^]g@ݯjcr6cz6tw\m1$~vB)q3+|9䊄gC76ә y:{n%ta_mIGO?}Z ^%gU l%7EBJD #'*{H6n2JXL.\/?1usuu/^ E%Mo5X*b6%?BRTH4_U._g/PeR+j7zK GP=f'⊌^]\0UXZy1n[KlDcytX% knIV +n^h~v;|Rc$cQhCr$ Y6Kԃ㐄AHquIұ'(s9k '0Ø̦=ϳ{Dxj8]^}7́ 8r$Mi0M㫃tL Y93( : PK!HiDaM$ipfromwebpage-0.9.2.dist-info/RECORDͻv0("d@ 4apB)1w:9W^;xzIROO+ӅbijoMM6|g*y7/)oՓTrC'i:O)1 [3ٺV|ˁ,$ ^NYN V~m`vNȵ%LwDJ#J?b3׆s0ĦxR@ n_~h?n#;~xW{0v!Zj^ "l|BK;vMyA18O Wԏ8jvRxqSS_h{apsn, Zc:oPK!=Daaipfromwebpage/__init__.pyPK! Vipfromwebpage/ipfromwebpage.pyPK!H;1:.ipfromwebpage-0.9.2.dist-info/entry_points.txtPK!2777( ipfromwebpage-0.9.2.dist-info/LICENSE.mdPK!H$TT#ipfromwebpage-0.9.2.dist-info/WHEELPK!HWX&ipfromwebpage-0.9.2.dist-info/METADATAPK!HiDaM$ipfromwebpage-0.9.2.dist-info/RECORDPK<