# Phone Number Lookup Tool
# Version 1.0.0
# Coded by InvisibleMan in Python 3.3.2
# Download : N/A
# File	   : phonetrak.py

#IMPORTS
import re
import sys
import urllib.request

#BYTE CONTROL
def encodeString(string) : return string.encode('utf-8')
def decodeString(string) : return string.decode('utf-8')

#DEBUG MESSAGES
def action(msg)    : print('[#] - ' + msg)
def alert(msg)     : print('[+] - ' + msg)
def error(msg)     : print('[!] - ' + msg)
def errorExit(msg) : raise SystemExit('[!] - ' + msg)

#GET BETWEEN
def getBetween(source, start, stop):
    search = encodeString(start + '(.*?)' + stop)
    data   = re.compile(search).search(source)
    if data:
        found = decodeString(data.group(1))
        return found.replace('\n', '')
    else:
        return False

#GET CARRIER
def getCarrier(number):
    source   = urllib.request.urlopen('http://www.fonefinder.net/findome.php?npa=' + number[:3] + '&nxx=' + number[3:6] + '&thoublock=' + number[6:]).read()
    carrier  = getBetween(source, '</A><TD><A HREF=\'http://fonefinder.net/', '\'>')
    if carrier == 'att.php':
        alert('Carrier : AT&T')
        alert('SMS Gateway : ' + number + '@txt.att.net')
    elif carrier == 'metropcs.php':
        alert('Carrier : Metro PCS')
        alert('SMS Gateway : ' + number + '@mymetropcs.com')
    elif carrier == 'sprint.php':
        alert('Carrier : Sprint')
        alert('SMS Gateway : ' + number + '@messaging.sprintpcs.com')
    elif carrier == 'tmobile.php':
        alert('Carrier : T-Mobile')
        alert('SMS Gateway : ' + number + '@tmomail.net')
    elif carrier == 'verizon.php':
        alert('Carrier : Verizon')
        alert('SMS Gateway : ' + number + '@vtext.com')
    else:
        errorExit('Carrier : Unknown')
        errorExit('SMS Gateway : Unknown')

#VERIFY PHONE
def verifyPhone(number):
    if len(number) == 10 and number.isdigit() == True:
        return True
    else:
        return False

#VERSION CHECK
def versionCheck():
    if sys.version_info.major != 3 or sys.version_info.minor != 3:
        errorExit('Requires Python version 3.3 to be installed.')

#START
if len(sys.argv) != 2:
    error('Missing command line arguments!')
    errorExit('Usage : phonetrak.py <number>')
number = sys.argv[1]
if verifyPhone(number) == True:
    try:
        getCarrier(number)
    except:
        errorExit('Failed to retrieve carrier!')
else:
    error('Invalid phone number!')
    errorExit('Usage : phonetrak.py <number>')