暴力Python:端口输入未被分离
所以我同时从“暴力Python”学习Python和黑客,我遇到了一个问题 这是我的密码:暴力Python:端口输入未被分离,python,Python,所以我同时从“暴力Python”学习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)
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()
我的目标ip是scanme.org,是为扫描而设计的。谢谢 端口的值中有一个逗号,因此Python无法将字符串顺利转换为整数。您可以在解释器中轻松复制此异常:
>>> int("2,")
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
int("2,")
ValueError: invalid literal for int() with base 10: '2,'
>>> int("2")
2
>>int(“2”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
int(“2,”)
ValueError:基数为10的int()的文本无效:“2,”
>>>int(“2”)
2.
要删除逗号,只需不在命令行中传入即可。或者,如果您真的必须这样做,请处理输入以使其可以转换。端口的值中有一个逗号,因此Python无法顺利地将字符串转换为整数。您可以在解释器中轻松复制此异常:
>>> int("2,")
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
int("2,")
ValueError: invalid literal for int() with base 10: '2,'
>>> int("2")
2
>>int(“2”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
int(“2,”)
ValueError:基数为10的int()的文本无效:“2,”
>>>int(“2”)
2.
要删除逗号,只需不在命令行中传入即可。或者,如果您确实需要,请处理输入以便可以转换。如果您更改:
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
到
它应该可以工作,但不确定在参数解析中哪里出错。如果您更改:
t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
到
它应该可以工作,但不确定解析参数时出错的地方。首先,您误解了命令行的解析方式 你通过:
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
只解析'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]是None
),因为None
是一个单例。首先,您误解了命令行的解析方式
你通过:
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
只解析'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]是None
),因为None
是一个单例。我认为optparse
将字符串解析到第一个空格。试试这个:python-port\u scanner.py-h74.207.244.221-p“21,22,80”
您可以使用python-port\u scanner.py-h74.207.244.221-p21,22,80启动它,但是您还需要将代码更改为split以使用,“
而不是,”
int()。试试这个:python-port\u scanner.py-h74.207.244.221-p“21,22,80”
您可以使用python-port\u scanner.py-h74.207.244.221-p21,22,80启动它,但是您还需要将代码更改为split以使用,“
而不是,”
int()
可以跳过空白,因此应该可以正常工作。非常感谢!这真的帮了我很大的忙!非常感谢你!这真的帮了我很大的忙!