2

我正在尝试在 Python 中创建一个 TCP 端口扫描器,它接受多个参数(-all(显示目标的所有端口,包括打开和关闭的端口)、-open(仅显示目标上的打开端口)、-target (指定目标 IP、子网或主机名)和 -range(指定端口范围)。

目前我只设法对程序中使用的选项进行编码,我的代码如下:

import optparse

parser = optparse.OptionParser()
parser.add_option('-all', dest='allPorts', help='displays all ports regardless of status')
parser.add_option('-open', dest='openPorts', help='displays only open ports')
parser.add_option('-target', type='string', dest='targetIP', help='specify target IP address, subnet or hostname')
parser.add_option('-range', type='string', dest='portRange', help='specify port range')

(options, args) = parser.parse_args()

我不确定如何继续使用该程序,特别是使用 -all / -open 选项,任何帮助将不胜感激。

4

4 回答 4

3

通常,您使用str.join从几个不同的字符串构建一个新字符串:

''.join(data[:3])

并替换o0use str.replace

''.join(data[:3]).replace('o', '0')

请注意,您可以获得 3 个样本random.sample(data, 3),您不需要重新洗牌data

''.join(random.sample(data, 3)).replace('o', '0')

要排除包含"e"您的单词,您只能保留输入中包含"e"的单词:

with open('randomwords.txt', 'r') as f:
    # a conditional list comprehension
    data = [word for word in f.read().split() if "e" not in word]

[...]
于 2017-02-06T16:05:12.863 回答
2

试试这个:

"{}{}{}".format(w1,w2,w3).replace("o","0")
于 2017-02-06T16:03:27.610 回答
1

我已经修改了此处发布的一个答案,实际上我想编辑该答案但被作者删除。
尝试以下:

res = ""
for x in data[:3]:
    res += x
    res.replace("o", "0")
print res

或者

res = ""
for x in data[:3]:
    res = res + x
print res.replace("o", "0")

试试最后一个。

于 2017-02-06T16:05:22.047 回答
1

首先,您的分配似乎允许重复(例如密码,如“passw0rdpassw0rdpassw0rd”),而您的方法不允许。这也是低效的。您可以使用random.choice三次。

字符串的连接是用+运算符完成的,例如concatenation = str1 + str2 + str3,或join函数。用 0 替换 o 是用字符串类方法完成的replace,例如concatenation.replace('o', '0')

于 2017-02-06T16:08:21.027 回答