【发布时间】:2021-04-25 07:21:45
【问题描述】:
我最近开始学习 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()
示例输入:
python portscan.py -H 192.168.0.102 -p 80
样本输出:
[+]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
【问题讨论】:
-
它的
AF_INET,而不是AF_NET。这导致了NameError,因此从未分配过sock,并且执行了excpet块。这就是为什么你不应该使用except:,而是指定异常类型(即ConnectionError) -
@בנימיןכהן 写了一个答案。为什么要评论?
-
我太懒了:(你可以写
-
谢谢它的工作
标签: python sockets port-scanning