感謝您花時間看看我的問題。將scapy輸出打印到wxPython文本控制器
我正在學習wxPython的繩索,我想要一個輸出到終端的工作程序,並給它一個整容。通過Scapy,我正在嗅探無線接口以獲取探測請求/探測響應,並按預期工作。然而,我想要輸出到終端窗口,而不是輸出到我的新GUI中的StaticText(tc2)幀。
現在我一直在使用一個教程來創建我的GUI,但是,當前的代碼仍然在加載我的GUI之前輸出Scapy到終端,因爲sniff函數運行直到它被用戶殺死,因此從未真正加載GUI。我已經嘗試將sniff函數放在wx.StaticText行中,但沒有將它打印在那裏的樂趣。
我的Scapy程序和GUI程序都可以獨立工作,但它們不能同時工作。我的目標是將返回值顯示在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()
邁克,你讓我去上正確的軌道上。我得到它顯示一行,但現在我遇到了凍結問題。我按嗅,它凍結。我猜測它在文本重定向的某個地方被掛起了。我用你的資源來指導我。這是我所做的。 – pyRabbit 2013-03-25 21:10:03
查看我對OP的更改。 – pyRabbit 2013-03-25 21:16:28
我在代碼中的任何地方都看不到wx.Yield。您可能需要在線程內執行Sniff代碼,並使用wx.CallAfter將其發回GUI。雖然我不熟悉這個嗅探器。你可能會考慮交叉發佈到wxPython郵件列表。他們在那裏非常有幫助! – 2013-03-25 21:29:05