感谢您花时间看我的问题。
我正在学习 wxPython 的诀窍,我想采用一个输出到终端的工作程序并对其进行整容。使用 Scapy,我正在嗅探我的无线接口以获取探测请求/探测响应,它按预期工作。但是,我不想输出到终端窗口,而是将其输出到我的新 GUI 中的 StaticText (tc2) 框架。
到目前为止,我一直在使用教程来创建我的 GUI,但是,当前代码仍然在加载我的 GUI 之前将 Scapy 输出到终端,因为嗅探函数一直运行到它被用户杀死,因此从未真正加载 GUI。我已经尝试将嗅探功能放在 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()