Advertisement
NetPwn

KAPY-Tutorial-13 (Screen 2 foundation)

Apr 1st, 2015
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.47 KB | None | 0 0
  1. from kivy.uix.boxlayout import BoxLayout
  2. from kivy.uix.label import Label
  3. from kivy.uix.button import Button
  4. from kivy.uix.textinput import TextInput
  5. from kivy.lang import Builder
  6. from kivy.app import App
  7. from scapy.all import *
  8. from kivy.uix.scrollview import ScrollView
  9. from kivy.uix.screenmanager import ScreenManager, Screen
  10. from kivy.uix.switch import Switch #TUT 7
  11. from kivy.uix.popup import Popup
  12. from kivy.clock import Clock
  13. from subprocess import check_output
  14. import threading
  15. import socket
  16.  
  17.  
  18. Builder.load_string('''
  19. <MITMs1>:
  20.    BoxLayout:
  21.        canvas:
  22.            Rectangle:
  23.                source: 'images/kapy-bg3.jpg'
  24.                size: self.size
  25.                pos: self.pos
  26.        BoxLayout:
  27.            id: client_box
  28.            orientation: 'vertical'
  29.            size_hint: 0.5, 1
  30.            spacing: 10
  31.            Image:
  32.                ## Tut 7
  33.                source: 'zips/pyspin.zip'
  34.                anim_delay: 1/80
  35.                allow_stretch: False
  36.                pos_hint: {'x': -.3}
  37.            Label:
  38.                id: device_lbl
  39.                markup: True
  40.                size_hint: 1, 1
  41.            BoxLayout:
  42.                TextInput:
  43.                    id: iface_name
  44.                    size_hint: .3, 0.2
  45.                    text: 'wlan2'
  46.                    multiline: False
  47.                Switch:
  48.                    size_hint: .3, .1
  49.            BoxLayout:
  50.                Button:
  51.                    size_hint: .5, .4
  52.                    text: '[color=00ff00]Run ifconfig[/color]'
  53.                    on_release: root.run_ifconfig()
  54.                    markup: True
  55.                    background_normal: 'images/buttonBG.png'
  56.                Button:
  57.                    id: scnLAN
  58.                    size_hint: .5, .4
  59.                    text: '[color=00ff00]ARP Scan[/color]'
  60.                    on_release: root.ARPscan()
  61.                    background_normal: 'images/buttonBG.png'
  62.                    disabled: True
  63.                    markup: True
  64.                Button:
  65.                    id: save_btn
  66.                    text: '[color=00ff00]Save Results[/color]'
  67.                    size_hint: .5, .4
  68.                    background_normal: 'images/buttonBG.png'
  69.                    markup: True
  70.                    disabled: True
  71.                    on_press: root.saveResults()
  72.        ScrollView:
  73.            size_hint: 0.5, 1
  74.            do_scroll_x: False
  75.            bar_width: 10
  76.            BoxLayout:
  77.                id: nodes
  78.                orientation: 'vertical'
  79.                size_hint: (1, None)
  80. <MITMs2>:
  81.    BoxLayout:
  82.        canvas:
  83.            Rectangle:
  84.                source: 'images/kapy-bg3.jpg'
  85.                size: self.size
  86.                pos: self.pos
  87.        BoxLayout:
  88.            orientation: 'vertical'
  89.            BoxLayout:
  90.                orientation: 'vertical'
  91.                Label:
  92.                    text: 'Target Info'
  93.            BoxLayout:
  94.                Button:
  95.                    text: '[color=00ff00]Back[/color]'
  96.                    size_hint: 1, .1
  97.                    on_press: root.main_screen()
  98.                    markup: True
  99.                    background_normal: 'images/buttonBG.png'
  100.                Button:
  101.                    text: '[color=00ff00]Port Scan[/color]'
  102.                    size_hint: 1, .1
  103.                    on_press: root.main_screen()
  104.                    markup: True
  105.                    background_normal: 'images/buttonBG.png'
  106.                Button:
  107.                    text: '[color=00ff00]Save Results[/color]'
  108.                    size_hint: 1, .1
  109.                    on_press: root.main_screen()
  110.                    markup: True
  111.                    background_normal: 'images/buttonBG.png'
  112.        BoxLayout:
  113.            orientation: 'vertical'
  114.            Label:
  115.                text: 'Open Ports'
  116.            Button:
  117.                text: '[color=00ff00]Back[/color]'
  118.                on_press: root.main_screen()
  119.                size_hint: 1,.1
  120.                markup: True
  121.                background_normal: 'images/buttonBG.png'
  122. ''')
  123.  
  124. class MITMs1(Screen):
  125.     def __init__(self, **kwargs):
  126.         super(MITMs1, self).__init__(**kwargs)
  127.  
  128.         self.save_btn = self.ids['save_btn']
  129.         self.iface_name = self.ids['iface_name']
  130.         self.device_lbl = self.ids['device_lbl']
  131.         self.client_box = self.ids['client_box']
  132.         self.nodes = self.ids['nodes']
  133.         self.my_ip = '' #Empty string # TUT 5
  134.         self.scnLAN = self.ids['scnLAN']
  135.         self.node_list = [] #list to adjust scrollview size, append nodes
  136.         self.logos = [['Apple', 'iphone', 'mac', 'ipad'],
  137.                       ['Android', 'nexus'],
  138.                       ['Windows', 'user', '192.168.10.1', 'vista', 'xp'],
  139.                       ['Gateway', '192.168.10.254', 'netgear'],
  140.                       ['Linux', 'apache', 'ubuntu']]
  141.  
  142.     def run_ifconfig(self):
  143.         self.scnLAN.disabled = False
  144.         try:
  145.             self.ifconfig = subprocess.check_output(['ifconfig', self.iface_name.text]) #Add wlan0 for interface.
  146.  
  147.             self.iface, self.my_ip,self.MAC, self.Bcast, self.Nmask, self.ipv6 = (self.ifconfig.split()[i] for i in (0,6,4,7,8,11))# TUT 4
  148.  
  149.             self.device_lbl.text = ('[color=00ff00][i][b]My Device[/b][/i][/color]'+ '\n\n' + 'Interface: '# TUT 4
  150.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.iface) + '\n\n' + 'IP: '# TUT 4
  151.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.my_ip[5:]) + '\n\n' +  'MAC: '# TUT 4
  152.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.MAC) + '\n\n' +  'Bcast: '# TUT 4
  153.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.Bcast[6:]) + '\n\n' +  'Nmask: '# TUT 4
  154.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.Nmask[5:]) + '\n\n' +  'IPv6: '# TUT 4
  155.                 + '[color=00ff00][i]{0}[/i][/color] '.format(self.ipv6 ))# TUT 4
  156.         except:
  157.             pass
  158.  
  159.  
  160.  
  161.     def ARPscan(self): #TUT 7
  162.         self.save_btn.disabled = False
  163.         self.nodes.clear_widgets()
  164.         self.node_list = [] #make sure list is empty
  165.         try:
  166.             for ip in xrange(255):
  167.                 scanNode = ARPthread(ip,self.nodes,self.iface_name.text,
  168.                                      self.node_list,self.logos) # Create a thread
  169.                 scanNode.start() # Start the thread
  170.                 print 'Started thread: %s ' %ip
  171.         except:
  172.             pass
  173.  
  174.     def timeDate(self):
  175.         now = time.localtime(time.time())
  176.         return time.asctime(now) # Get the date time
  177.  
  178.     def saveResults(self):
  179.         self.box = BoxLayout(orientation='vertical')
  180.         self.tinput = TextInput(text='') # Name the file
  181.         self.svebtn = Button(text='Save File!', on_press=self.saveFile) # Button to save file
  182.         self.lbl = Label(text='') # Label to display to the user the file is saved
  183.  
  184.         self.box.add_widget(self.tinput)
  185.         self.box.add_widget(self.svebtn)
  186.         self.box.add_widget(self.lbl)
  187.         # Create the popup #
  188.  
  189.         self.pop = Popup(content=self.box, title='Save Scan Results', size_hint=(1, .5))
  190.  
  191.         self.pop.open()
  192.  
  193.     def saveFile(self, i):
  194.         f = open(self.tinput.text + '.txt', 'a')
  195.         f.write('[] LAN Scan [] \n\n' + self.timeDate() + '\n\n' +
  196.         '%s Hosts Up!\n\n' %len(self.node_list))
  197.  
  198.         for i in self.node_list:
  199.             f.write('IP: ' + i.psrc + '\n' + 'MAC: ' + i.hwsrc + '\n\n')
  200.         f.close() # Close the file
  201.         self.lbl.text = 'File Saved!'
  202.  
  203.     def change_screen(self):
  204.         sm.current = 'MITMs2'
  205.  
  206.  
  207.  
  208. class ARPthread(threading.Thread):
  209.     '''Threaded ARP scan'''
  210.     def __init__(self,ip,nodes,iface,node_list,logos):
  211.         self.logos = logos
  212.         self.node_list = node_list
  213.         self.ip = ip # host to scan
  214.         self.nodes = nodes # the scrollview box
  215.         self.iface = iface # the text from the textinput for the NIC
  216.         threading.Thread.__init__(self)
  217.     try:
  218.         def run(self):
  219.             arprequest = Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst='192.168.10.'+str(self.ip), hwdst='ff:ff:ff:ff:ff:ff')
  220.             arpresponse = srp1(arprequest, timeout=2, verbose=0, iface=self.iface)
  221.             if arpresponse:
  222.                 self.node_list.append(arpresponse) #add node to the list
  223.                 try:
  224.                     hostname = socket.gethostbyaddr(arpresponse.psrc)[0]
  225.                 except:
  226.                     pass
  227.  
  228.                 choose_button = ''
  229.                 for i in self.logos:
  230.                     for make in i:
  231.                         if make.lower() in hostname:
  232.                             choose_button = i[0] #Assign the first item.
  233.  
  234.  
  235.                 if choose_button == 'Android':
  236.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  237.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  238.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  239.                     height='150sp', background_normal='images/androidNode.png', valign='middle', halign='center',
  240.                     on_press=MITMs1.change_screen))
  241.  
  242.                 elif choose_button == 'Apple':
  243.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  244.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  245.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  246.                     height='150sp', background_normal='images/appleNode.png', valign='middle', halign='center',
  247.                     on_press=MITMs1.change_screen))
  248.  
  249.                 elif choose_button == 'Windows':
  250.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  251.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  252.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  253.                     height='150sp', background_normal='images/windowsNode.png', valign='middle', halign='center',
  254.                     on_press=MITMs1.change_screen))
  255.  
  256.                 elif choose_button == 'Linux':
  257.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  258.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  259.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  260.                     height='150sp', background_normal='images/linuxNode.png', valign='middle', halign='center',
  261.                     on_press=MITMs1.change_screen))
  262.  
  263.                 elif choose_button == 'Gateway':
  264.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  265.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  266.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  267.                     height='150sp', background_normal='images/gatewayNode.png', valign='middle', halign='center',
  268.                     on_press=MITMs1.change_screen))
  269.  
  270.  
  271.                 elif choose_button == '':
  272.                          self.nodes.add_widget(Button(text='[color=00ff00][i]Host is up\n{0}[/i][/color]'.format(hostname) +
  273.                     '\n[color=00ff00]IP: [i]{0}[/i][/color]'.format(arpresponse.psrc)+'\n' +
  274.                     '[color=00ff00]MAC: {0}[/color]'.format(arpresponse.hwsrc + '\n' ), markup=True, font_size='15sp',
  275.                     height='150sp', background_normal='images/unknownNode.png', valign='middle', halign='center',
  276.                     on_press=MITMs1.change_screen))
  277.  
  278.  
  279.             self.nodes.height = len(self.node_list * 150)
  280.     except:
  281.         pass
  282.  
  283. class MITMs2(Screen):
  284.     def __init__(self, **kwargs):
  285.         super(MITMs2, self).__init__(**kwargs)
  286.  
  287.  
  288.     def main_screen(self):
  289.         sm.current = 'MITMs1'
  290.  
  291. sm = ScreenManager()
  292. sm.add_widget(MITMs1(name='MITMs1'))
  293. sm.add_widget(MITMs2(name='MITMs2'))
  294.  
  295.  
  296.  
  297. class MITMtool(App):
  298.     def build(self):
  299.         return sm #Return the Screen (Screen 1)
  300.  
  301.  
  302. if __name__=='__main__':
  303.     MITMtool().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement