Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';我不明白为什么我的端口扫描器Python程序会出错_Python_Sockets_Port Scanning - Fatal编程技术网

我能';我不明白为什么我的端口扫描器Python程序会出错

我能';我不明白为什么我的端口扫描器Python程序会出错,python,sockets,port-scanning,Python,Sockets,Port Scanning,我最近开始学习Python,并尝试使用Python制作端口扫描程序,但我遇到了一些错误。有人能帮我理解我哪里出错了吗 #!/usr/bin/python3 from socket import * import optparse from threading import * def connScan(tgHost,tgPort): try: sock=socket(AF_NET,SOCK_STREAM) soc

我最近开始学习Python,并尝试使用Python制作端口扫描程序,但我遇到了一些错误。有人能帮我理解我哪里出错了吗

#!/usr/bin/python3

from socket import *
import optparse
from threading import *

def connScan(tgHost,tgPort):
        try:
                sock=socket(AF_NET,SOCK_STREAM)
                sock.connect((tgHost,tgPort))
                print('[+]%d/tcp Open'%tgPort)
        except:
                print('[-]%d/tcp Closed'%tgPort)
        finally:
                sock.close()

def portscan(tgHost,tgPort):
        try:
                tgIP=gethostbyname(tgHost)
        except:
                print('[!] Unkonown Host %s'%tgHost)
        try:
                tgName=gethostbyaddr(tgIP)
                print('[+] Scan Result :' + tgName[0])
        except:
                print('[+]Scan Reults for:' + tgIP)
        setdefaulttimeout(0)
        for port in tgPort:
                t=Thread(target=connScan,args=(tgHost,int(port)))
                t.start()

def main():
        parser=optparse.OptionParser("Usage of Program :" + " -H <target host> -p <target port> ")
        parser.add_option('-H',dest='tgHost',type='string',help='specify target host')
        parser.add_option('-p',dest='tgPort',type='string',help='specify target port separated by comma')
        (options,args)=parser.parse_args()
        tgHost=options.tgHost
        tgPort=str(options.tgPort).split(',')

        if (tgHost==None) | (tgPort[0]==None):
                print (parser.usage)
                exit(0)

        portscan(tgHost,tgPort)

if __name__=='__main__':
        main()

错误信息应该是不言而喻的;您试图在
finally:
块中使用的变量未定义,因为
try:
块中的错误发生在分配变量之前

您有一个类似的错误,您可能会尝试使用
tgIP
,即使您刚刚发现没有IP地址可以解析

一般来说,你应该尽量避免导入*;您的代码只在少数地方使用了
socket
,因此拼写出来是一个小小的不便,同时它使您的代码更清晰。对于
线程
,同上

类似地,您应该避免覆盖
,除了:
块,并且只捕获您实际知道如何处理的异常

optparse
模块已过时,通常应在新代码中替换为
argparse
;但是,您的参数首先不是可选的,所以也许不要为这个琐碎的任务使用单独的模块

#/usr/bin/python3
将套接字作为
导入线程
def connScan(tgHost、tgPort):
袜子=无
尝试:
#请注意打印错误
sock=s.socket(AF\u INET,sock\u STREAM)
sock.connect((tgHost,tgPort))
打印('[+]%d/tcp打开''%tgPort]
除s.错误外:
打印('[-]%d/tcp关闭''%tgPort]
最后:
如果sock不是无:
sock.close()
def端口扫描(tgHost、tgPorts):
尝试:
tgIP=s.gethostbyname(tgHost)
除s.Gairror外:
打印(“[!]未知主机%s”%tgHost)
#放弃
一无所获
尝试:
tgName=s.gethostbyaddr(tgIP)
打印('[+]扫描结果:'+tgName[0])
除s.Gairror外:
打印('[+]扫描结果:'+tgIP)
s、 setdefaulttimeout(0)
对于tgPorts中的端口:
线程(target=connScan,args=(tgHost,int(port)))
t、 开始()
def main():
从系统导入argv
导入日志记录
如果len(argv)<3:
日志记录。错误(“程序的用法:%s…”,argv[0]。拆分(“/”)[-1])
出口(2)
端口扫描(argv[1],argv[2:])
如果“名称”=“\uuuuuuuu主要”:
main()

请注意,端口列表现在是以空格分隔的。(请注意“separate”的正确拼写)

它的
AF\u INET
,而不是
AF\u NET
。这导致
namererror
因此从未分配
sock
,并且执行
excpet
块。这就是为什么您不应该使用
异常:
,而是指定异常的类型(即
ConnectionError
)@。为什么要发表评论?我太懒了:(你可以写它,感谢它的工作未经测试;可能需要一些额外的调整。特别是线程的使用看起来有点不合适,但不是在我可以解决问题的地方。
[+]Scan Reults for:192.168.0.102 
    [-]80/tcp Closed
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File "C:\python3.9.4\lib\threading.py", line 954, in _bootstrap_inner
        self.run()
      File "C:\python3.9.4\lib\threading.py", line 892, in run
        self._target(*self._args, **self._kwargs)
      File "C:\Users\DEBGANDHAR\pytools\adv.py", line 15, in connScan
        sock.close()
    UnboundLocalError: local variable 'sock' referenced before assignment