You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:23:18