gpt4 book ai didi

python - 暴力 python : port inputs not being seperated

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:53 27 4
gpt4 key购买 nike

所以我在学习 Python 的同时从“Violent Python”开始黑客攻击,我遇到了一个问题这是我的代码:

import optparse
import socket
from socket import *
from threading import *

screenLock = Semaphore(value = 1)

def connScan(tgtHost, tgtPort):
try:
connSkt = socket(AF_INET, SOCK_STREAM)
connSkt.connect((tgtHost, tgtPort))
connSkt.send('ViolentPython\r\n')
results = connSkt.recv(100)
screenLock.acquire()
print '[+]%d/tcp open' %tgtPort
print '[+] ' + str(results)
except:
screenLock.acquire()
print '[-]%d/tcp closed' %tgtPort
finally:
screenLock.release()
connSkt.close()
def portScan(tgtHost, tgtPorts):
try:
tgtIP = gethostbyname(tgtHost)
except:
print "[-] Cannot resolve '%s': Unknown host" %tgtHost
return
try:
tgtName = gethostbyaddr(tgtIP)
print '\n[+] Scan Results for ' +tgtName[0]
except:
print '\n[+] Scan Results for ' +tgtIP
setdefaulttimeout(10)
for tgtPort in tgtPorts:
print 'Scanning port ' +tgtPort
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
t.start()
def main():
parser = optparse.OptionParser('usage %prog ' +\
'-H <target host> -p <target port>')
parser.add_option('-H', dest='tgtHost', type='string', \
help='specify target host')
parser.add_option('-p', dest='tgtPort', type='string', \
help='specify target port[s] seperated by a comma')
(options, args) = parser.parse_args()
tgtHost = options.tgtHost
tgtPorts = str(options.tgtPort).split(', ')
if (tgtHost == None) | (tgtPorts[0] == None):
print parser.usage
exit(0)
portScan(tgtHost, tgtPorts)
if __name__ == '__main__':
main()

运行程序我收到以下错误消息:

  File "port_scanner.py", line 54, in <module>
main()
File "port_scanner.py", line 52, in main
portScan(tgtHost, tgtPorts)
File "port_scanner.py", line 37, in portScan
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
ValueError: invalid literal for int() with base 10: '21,'

有人可以帮忙吗?我对此还是个新手,但我猜 Python 不会通过运行此命令来分隔我输入的不同端口:

python port_scanner.py -H 74.207.244.221 -p 21, 22, 80

我定位的 ip 是 scanme.org,用于扫描。谢谢!

最佳答案

首先,您误解了命令行的解析方式。

你传入:

python port_scanner.py -H 74.207.244.221 -p 21, 22, 80

这意味着 Python 看到:

['-H', '74.207.244.221', '-p', '21,', '22,', '80']

optparse.OptionParser 因此解析just '21,' 作为-p 的值转变。因此,options.tgtPort 被设置为 '21,',并且对该值的 .split(', ') 导致 ['21,'] 因为该输入字符串中没有 ', '(逗号和空格)。

要在参数中包含空格,请在命令行中使用引号:

python port_scanner.py -H 74.207.244.221 -p "21, 22, 80"

但您真的想调整命令行解析以分隔逗号并容忍空格:

tgtPorts = [p.strip() for p in options.tgtPort.split(',')]

另一件需要理解的事情是,使用 .split() 拆分字符串将生成一个包含至少一个元素的列表:

>>> 'foo'.split(',')
['foo']

因此您对 tgtPorts[0] == None 的测试将始终为 False。请注意,正常的 Python 习语是使用 is 代替 None(tgtPorts[0] is None),因为 None 是单例。

关于python - 暴力 python : port inputs not being seperated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com