调用prtscnr.portscanner()触发AttributeError问题求助
解决AttributeError: module 'prtscnr' has no attribute 'portscanner'问题
问题核心是你把portscanner函数定义在了if __name__ == "__main__":代码块内部。当prtscnr作为模块被login.py导入时,这个条件块里的代码不会执行,所以portscanner函数并没有被注册到prtscnr模块的全局命名空间里,外部自然调用不到。
修复步骤:
- 把
portscanner函数移到if __name__ == "__main__":代码块外面,让它成为模块的全局函数,这样导入模块时就能被加载。 - 如果需要保留直接运行prtscnr.py就能启动端口扫描的功能,可以在
if __name__ == "__main__":块里调用portscanner()。
修改后的prtscnr.py代码:
#upgrade. dosya adını ve konumunu kullanıcıdan al. loopu hızlandır. import socket def portscanner(): # port aralığını başlangıç ve bitiş değerlerine ayır target = input("Hedefin IP adresini veya URL'ini girin: ") port_range = input("Taranacak olan port aralığını girin (örnek: 1-1000): ") start_port, end_port = map(int, port_range.split("-")) # açık portları tutmak için bir liste oluştur open_ports = [] # aralıktaki tüm portlar için for döngüsü for port in range(start_port, end_port+1): # socket oluştur client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # bağlantı girişimi için timeout client.settimeout(0.5) # hedef IP/Hostname'e bağlantı girişimi try: response = client.connect_ex((target, port)) # Bağlantı başarılıysa 0 döndürür ve açık olan portları terminalde yazar if response == 0: open_ports.append(port) print("Port {0}: Açık".format(port)) # socketi kapat client.close() except: pass # Açık port numaralarını .txt dosyası içine yazar dosya_adi = input("Dosya adını girin: ") dosya_konumu = input("Dosya konumunu girin: ") with open(dosya_konumu + "\\" + dosya_adi + ".txt", "w") as file: file.write("{0} için port {1} den port {2} e kadar olan açık portlar:\n".format(target, start_port, end_port)) for port in open_ports: file.write("{0}\n".format(port)) print("Open port numbers have been written to {0}".format(dosya_adi)) if __name__ == "__main__": portscanner()
这样修改后,login.py里调用prtscnr.portscanner()就能正常执行,同时直接运行prtscnr.py也能启动端口扫描功能。
内容的提问来源于stack exchange,提问作者Sloan
相关产品推荐
相关产品推荐

