私の質問をご覧いただきありがとうございます。
私はwxPythonのロープを学んでおり、ターミナルに出力する実用的なプログラムを使用して、フェイスリフトを提供したいと考えています。Scapyを使用して、ワイヤレスインターフェイスでプローブ要求/プローブ応答をスニッフィングしていますが、意図したとおりに機能します。ただし、ターミナルウィンドウに出力する代わりに、新しいGUI内のStaticText(tc2)フレームに出力したいと思います。
これまでチュートリアルを使用してGUIを作成してきましたが、sniff関数はユーザーによって強制終了されるまで実行されるため、GUIをロードする前に、現在のコードはScapyをターミナルに出力します。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()