Обратный вызов кнопки Pysimple GUI для быстрого прослушивания сетевого трафика - PullRequest
0 голосов
/ 27 января 2020

Я использую pysimple GUI для создания GUI .. Я хочу использовать кнопку sniff, чтобы выполнить сканирование ARP с использованием Scapy, а затем распечатать детали этого в элементе Output или Multiline в pysimple GUI может кто-нибудь подсказать мне, как это сделать

В настоящий момент функция сканирования ARP работает в командной строке, но не распечатывает ее на элементе Output или Multiline.

# ===================================================================================================================================
# -----------------------------------------------------------------------------------------------------------------------------------
# Import Modules Section
# -----------------------------------------------------------------------------------------------------------------------------------
import PySimpleGUI as sg
import subprocess
import os
import sys
from scapy.all import Ether, ARP, srp
from scapy.all import *

# -----------------------------------------------------------------------------------------------------------------------------------
# Define Constants Section
# -----------------------------------------------------------------------------------------------------------------------------------


sg.SetOptions(icon=None,
              button_color=('blue', 'white'),
              element_size=(None, None),
              margins=(None, None),
              element_padding=(None, None),
              auto_size_text=None,
              auto_size_buttons=None,
              font=None,
              border_width=None,
              slider_border_width=None,
              slider_relief=None,
              slider_orientation=None,
              autoclose_time=None,
              message_box_line_width=None,
              progress_meter_border_depth=None,
              progress_meter_style=None,
              progress_meter_relief=None,
              progress_meter_color=None,
              progress_meter_size=None,
              text_justification=None,
              text_color=None,
              background_color=None,
              element_background_color=None,
              text_element_background_color=None,
              input_elements_background_color=None,
              element_text_color='blue',
              input_text_color=None,
              scrollbar_color=None,
              debug_win_size=(None, None),
              window_location=(None, None),
              tooltip_time=None,
              )


# -----------------------------------------------------------------------------------------------------------------------------------
# Define Modules Section
# -----------------------------------------------------------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------------------------------------------------------
# Functions
# -----------------------------------------------------------------------------------------------------------------------------------

def arp_scan():
    _range = raw_input("Enter the Target Range: ")
    _interface = raw_input("Enter the network interface: ")
    ip, ntBits = _range.split('/')
    ip_addresses = []
    st_bit = ip.split('.')[3:4][0]   #Since it's an IPv4
    for n in range(1, int(ntBits)+1):
        eval_ip = ".".join( ip.split('.')[:-1] ) + '.' + str(n)
        ip_addresses.append( eval_ip )

    for ip in ip_addresses:
        _pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip)
        ans, unans = srp( _pkt, iface=_interface, timeout=0.1, verbose=False)
        for snt, recv in ans:
            if recv:
                print("Host Alive: %s - %s" % (recv[ARP].psrc, recv[Ether].src))

# -----------------------------------------------------------------------------------------------------------------------------------
# Pre-Processing Section
# -----------------------------------------------------------------------------------------------------------------------------------
joblist = []
tool = dict()
tool['input-width'] = 144
tool['input-heigt'] = 10
tool['output-width'] = 140
tool['output-heigt'] = 30
tool['output-font'] = 'Courier'
tool['output-font-size'] = 10
tool['opm-flow-manual'] = 'None'
tool['opm-resinsight'] = 'None'
tool['edit-command'] = 'None'
vers = 'v1'

# -----------------------------------------------------------------------------------------------------------------------------------
# Define GUI Section
# -----------------------------------------------------------------------------------------------------------------------------------
mainmenu = [['File', ['Open', 'Save', 'Exit']]]

flowlayout = [[sg.Output(background_color='white', text_color='black',
                         size=(tool['output-width'], tool['output-heigt']),
                         key='_outflow_', font=(tool['output-font'], tool['output-font-size']))]]

loglayout = [[sg.Multiline(background_color='white', text_color='darkgreen', do_not_clear=True,
                           key='_outlog_', size=(tool['output-width'], tool['output-heigt']),
                           font=(tool['output-font'], tool['output-font-size']))]]

mainwind = [[sg.Menu(mainmenu)],
            [sg.Text('Available Hosts')],
            [sg.Listbox(values=joblist, size=(tool['input-width'], tool['input-heigt']), key='_joblist_',
                        font=(tool['output-font'], tool['output-font-size']))],

            [sg.Button('Start', key='_start_sniff_'),
             sg.Button('Stop')],
            # sg.Button('Delete Job'),
            # sg.Button('Clear Queue', key='_clear_queue_'),
            # sg.Button('Load Queue', key='_load_queue_'),
            # sg.Button('Save Queue', key='_save_queue_')],

            [sg.TabGroup([[sg.Tab('Text', flowlayout, key='_tab_output_',
                                  title_color='black', background_color='white'),
                           sg.Tab('URL', loglayout, key='_tab_outlog_',
                                  title_color='black', background_color='white', border_width=None),
                           sg.Tab('Images', loglayout, key='_tab_outlog_',
                                  title_color='black', background_color='white', border_width=None)]],
                         title_color='black', background_color='white')],

            # [sg.Button('Run Jobs', key='_run_jobs_'),
            # sg.Button('Kill Job', key='_kill_job_'),
            # sg.Button('Clear', key='_clear_'),
            [sg.Button('Exit', key='_exit_')]]
# [sg.Text('')]]

window0 = sg.Window('CTTool - Cleartext Tool ' + vers).Layout(mainwind)
-----------------------------------------------------------------------------------------------------------------------------------
# Define GUI Event Loop, Read Buttons, and Make Callbacks etc. Section
# -----------------------------------------------------------------------------------------------------------------------------------
while True:
    #
    # Read the Form and Process and Take appropriate action based on button
    #
    button, values = window0.Read()

    if button == '_clear_':
        if '_tab_output_' in str(values):
            window0.Element('_outlog_').Update('')

    if button == '_start_sniff_':
        try:
           arp_scan()
        except:
            pass

    if button == '_exit_' or button == 'Exit' or button is None:
        text = sg.PopupYesNo('Exit CTTool?')
        if text == 'Yes':
            text = sg.PopupYesNo('Are You Sure You wish to Exit CTTool?')
            if text == 'Yes':
                break

# -----------------------------------------------------------------------------------------------------------------------------------
# Post Processing Section
# -----------------------------------------------------------------------------------------------------------------------------------
window0.Close()

# ===================================================================================================================================
# End of CTTool.py
# ===================================================================================================================================

1 Ответ

0 голосов
/ 28 января 2020

У вас есть ошибки в вашем макете. Ваши вкладки используют тот же ключ, который не разрешен. Вы также попытались повторно использовать элемент. Они будут генерировать всплывающие сообщения об ошибках, которые идентифицируют проблему. loglayout является одним из них. Я скопировал его, чтобы избавиться от проблемы.

Что касается интеграции вашего arp_scan кода, вы захотите изменить его, удалив вызовы пользовательского интерфейса и вместо этого добавив их в главное окно GUI , Когда вы вызываете скан, передайте значения, которые сейчас вводятся через raw_input. Также передайте элемент, на который вы планируете выводить. Вместо использования print используйте update с элементом Multiline.

...