与Toplevel小窗口部件和端口扫描工具

与Toplevel小窗口部件和端口扫描工具

问题描述:

def PortScanWin(): 

win2 = Toplevel() 
win2.title("PortScan") 
win2.wm_maxsize(width='190',height='370') 
win2.wm_minsize(width='190',height='370') 

def go(): 
    global app 
    result.delete(1.0,END) 
    app=scan() 
    app.start() 

def stop(): 
    app.flag='stop' 

def clear(): 
    host_e.delete(0,END) 
    start_port_e.delete(0,END) 
    end_port_e.delete(0,END) 
    result.delete(1.0,END) 

class scan(threading.Thread): 
    def _init_(self): 
     threading.thread._init_(self) 
    def run(self): 
     self.host=host_e.get() 
     self.start_port=int(start_port_e.get()) 
     self.end_port=int(end_port_e.get()) 
     self.open_counter=0 
     self.flag='scan'  
     start.config(text="Stop",command=stop) 
     win2.update() 
     result.insert(END,"Scanning "+str(self.host)+"...\n\n") 
     win2.update() 
     while self.start_port<=self.end_port and self.flag=='scan': 
      self.sk=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
      self.sk.settimeout(0.01) 
      try: 
       self.sk.connect((self.host,self.start_port)) 
      except: 
       pass 
      else: 
       result.insert(END,str(self.start_port)+"\n") 
       win2.update() 
       self.open_counter=self.open_counter+1 
       self.sk.close() 
      self.start_port=self.start_port+1 
     if self.flag=='scan':  
      result.insert(END,"\nDone !!\nFound "+str(self.open_counter)+" opened ports") 
      win2.update() 
      start.config(text="Scan",command=go) 
      win2.update() 
     elif self.flag=='stop': 
      result.insert(END,"\n Scan stopped.") 
      start.config(text="Scan",command=go) 
      win2.update() 

Label(win2,text="Host: ").grid(row=1,column=1,sticky="w") 
host_e=Entry(win2) 
host_e.grid(row=1,column=2,sticky="WE") 
Label(win2,text="Start port: ").grid(row=2,column=1,sticky="w") 
start_port_e=Entry(win2) 
start_port_e.grid(row=2,column=2,sticky="WE") 
Label(win2,text="End port: ").grid(row=3,column=1,sticky="w") 
end_port_e=Entry(win2) 
end_port_e.grid(row=3,column=2,sticky="WE") 
start=Button(win2,text="Scan",command=go) 
start.grid(row=5,columnspan=3,sticky="WE") 
clear=Button(win2,text="Clear",command=clear) 
clear.grid(row=6,columnspan=3,sticky="WE") 
result=Text(win2,width=20,height=20) 
result.grid(row=7,columnspan=3,sticky="WENS") 

的端口扫描工具是在子窗口中运行,但有些问题是如何不工作,当我点击“扫描”我得到“Scanning..None”和它没有做任何事情,任何非常感谢您的帮助,谢谢。与Toplevel小窗口部件和端口扫描工具

学会信任你得到的反馈。在你的情况下,代码打印“扫描...无”。所以,当它(大概)应该是别的东西时,显然有些东西是“无”。找出为什么self.host是None,你可能会解决你的问题

这不是真的回答你的问题,但你可能想看看Scapy。 Scapy允许您构建自己的数据包并从网络接口读取原始数据。两者在编写端口扫描器时显然非常有帮助。因此,根据您的需要,您可能希望将您的端口扫描器替换为用Scapy编写的端口扫描器。

更多信息请访问:http://www.secdev.org/projects/scapy/