python - 我的带有“sys.argv”的python代码不起作用
问题描述
我正在用python制作一个SSRF扫描仪,但我对python中的'sys.argv'知之甚少。这是我的代码,当我运行时它不起作用(python3):
class targets:
def __init__(self, url, ip, port, method, param, error):
self.url = url
self.ip = ip
self.port = port
self.method = method
self.param = param
self.er = error
def scan(target):
print("Success!")
print(target.url)
print(target.method)
print(target.ip)
for carg in sys.argv:
target = targets('', '', '', '', '', "Please enter a valid command. If you don't know how to use it, enter '-help'")
if "-u" in carg:
argnum = sys.argv.index(carg)
argnum += 1
target.url = sys.argv[argnum]
if "-g" in carg:
argnum += 1
target.method = "g"
if "-i" in carg:
argnum = sys.argv.index(carg)
argnum += 1
target.ip = sys.argv[argnum]
if "-pt" in carg:
argnum = sys.argv.index(carg)
argnum += 1
target.port = sys.argv[argnum]
if "-p" in carg:
if not "-pa" in carg:
print("Please enter the parameters of request(POST)")
quit
argnum += 1
target.method = "p"
if "-i" in carg:
argnum = sys.argv.index(carg)
argnum += 1
target.ip = sys.argv[argnum]
if "-p" in carg:
argnum = sys.argv.index(carg)
argnum += 1
target.port = sys.argv[argnum]
else:
print(target.er)
quit
target.scan()
elif carg == "-help":
tuto = open("tutorial.dat", "r")
tuto.read()
tuto.close
print(tuto)
else:
print(target.er)
运行此代码后:ssrf.py -u google.com -g -i 123.123.123.123
我收到了这个:
Please enter a valid command. If you don't know how to use it, enter '-help'
Please enter a valid command. If you don't know how to use it, enter '-help'
Success!
google.com
Please enter a valid command. If you don't know how to use it, enter '-help'
Please enter a valid command. If you don't know how to use it, enter '-help'
Please enter a valid command. If you don't know how to use it, enter '-help'
Please enter a valid command. If you don't know how to use it, enter '-help'
那不是我正在等待的东西:
Success!
google.com
g
123.123.123.123
谁能告诉我这段代码有什么问题!(对不起,如果这是一个愚蠢的问题,对不起,如果英语不好)
解决方案
sys.argv
不是该任务的正确工具。使用argparse
. Python 文档非常丰富,其中包含有关使用sys
和argparse
例子:
#pars.py
import argparse
parser = argparse.ArgumentParser('SSRF',
description='SSRF scanner description')
parser.add_argument('-u','--url', metavar='url',
type=str, required=True, help='url to scan' )
parser.add_argument('-i','--ip', metavar='ip',
type=str, required=True, help='ip address' )
parsed = parser.parse_args()
# do something parsed.url or parsed.ip
print(parsed.url, parsed.ip)
print(parsed)
# run
#>>> python pars.py --help
#>>> python pars.py -i 133.333.3 -u hello.com
#>>> python pars.py --url world.com --ip 123.45.6
推荐阅读
- android - 单击 MenuIcons 时 Android Studio 应用程序崩溃
- vertex - 如何更改 PORTA 输出中的不等式表示?
- r - `purrr:map()` 打印列表中的项目及其名称
- python - 将重音从他们的字母中分离出来
- python - 当 DataFrame 包含字符串时,是否有等效于 DataFrame.idxmax 的方法?
- asp.net - 从带有命名空间的 ASPX 页面引用代码隐藏函数
- html - 什么是 web.config 中的重写 Html 标签
- cmake - 使 FetchContent 与 find_package 兼容
- webpack - 在 Gatsy.js 中使用 element-react 库
- r - ROCR 包的预测功能给出错误:“预测”包含 NA