#!/usr/bin/python

#
# Simple proxy for SET, note will show up in history
#

import pexpect
import sys
import getpass

from src.core.setcore import *

# grab the operating system
operating_system = check_os()

# if windows then do some stuff
if operating_system == "posix":

    definepath = os.getcwd()

    print "\n[*] Welcome to the SET-Proxy Configuration Utility"
    print "\nEnter the proxy setting informatiom below.\n\nExample: http://10.3.1.1:8080\n"

    try:

        proxy = raw_input("Enter the proxy server: ")
        username = raw_input("Enter the username for the proxy (hit enter for none): ")
        password = getpass.getpass("Enter the password for the proxy (hit enter for none): ")

    except KeyboardInterrupt:
        print "\n[!] Exiting the Social-Engineer Toolkit."
        sys.exit()

    if username != "":
        proxy_string = "export http_proxy='http://%s:%s@%s'" % (username,password,proxy)

    if username == "":
        proxy_string = "export http_proxy='http://%s'" % (proxy)

    filewrite = file(setdir + "/proxy.config", "w")
    filewrite.write(proxy_string)
    filewrite.close()

    from src.core.set import *

    def kill_proc(port,flag):
        proc=subprocess.Popen("netstat -antp | grep '%s'" % (port), shell=True, stdout=subprocess.PIPE)
        stdout_value=proc.communicate()[0]
        a=re.search("\d+/%s" % (flag), stdout_value)
        if a:
            b=a.group()
            b=b.replace("/%s" % (flag),"")
            subprocess.Popen("kill -9 %s 1> /dev/null 2> /dev/null" % (b), shell=True).wait()

    # cleans up stale processes from SET
    try:
        # kill anything python running on 80
        kill_proc("80","python")
        # kill anything on 443 ruby which is generally a rogue listener
        kill_proc("443", "ruby")

    # handle errors
    except Exception, error:
        log(error)
        pass
else:
    print "[!] Sorry, this only works on posix (nix) based systems and is not compatible with this operating system."