Спасибо, что нашли время, чтобы посмотреть на мой вопрос.
Я изучаю основы wxPython и хочу взять работающую программу, которая выводит данные на терминал, и обновить ее. С помощью Scapy я обнюхиваю свой беспроводной интерфейс на предмет запросов/ответов зонда, и он работает, как задумано. Однако я хочу вместо вывода в окно терминала выводить его в кадр StaticText (tc2) в моем новом графическом интерфейсе.
Теперь я использую учебник для создания своего графического интерфейса, однако текущий код по-прежнему выводит Scapy на терминал даже до загрузки моего графического интерфейса, поскольку функция sniff работает до тех пор, пока ее не убьет пользователь, поэтому никогда не загружает графический интерфейс. Я попытался поместить функцию sniff в строку wx.StaticText, но не получил удовольствия от ее печати.
И моя программа Scapy, и программа с графическим интерфейсом работают сами по себе, однако они не работают одновременно. Моя цель - отображать возвращаемые значения в поле StaticText. Ниже приведена небольшая часть моего кода, относящегося к моему вопросу.
tc2 = wx.TextCtrl(panel, wx.ID_ANY, size=(300,100), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
btn1 = wx.Button(panel, label='Sniff', size=(70, 30))
self.Bind(wx.EVT_BUTTON, self.OnSniff, btn1)
redir=RedirectText(tc2)
sys.stdout=redir
def OnSniff(self,e):
sniff(iface="mon0",prn=packets,store=0)
def packets(p):
if p.haslayer(Dot11ProbeReq):
dstmac=p.addr1
mac=p.addr2
if p.info == "":
ssid="BROADCAST"
else:
ssid=p.info
print "%s is probing %s %s" % (mac,dstmac,ssid)
if p.haslayer(Dot11ProbeResp):
dstmac=p.addr1
bssid=p.addr2
ssid=p.info
print "%s (%s) Probe Response to %s" % (ssid,bssid,dstmac)
wx.Yield()