Python TCP 端口扫描器

Python TCP port scanner

我正在尝试在 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 选项时,我们将不胜感激。

试试这个:

"{}{}{}".format(w1,w2,w3).replace("o","0")

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

''.join(data[:3])

并用 0 替换 o 使用 str.replace:

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

请注意,您可以使用 random.sample(data, 3) 获得 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]

[...]

我已经修改了这里发布的一个答案,其实我想编辑那个答案但被作者删除了。
尝试以下操作:

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")

试试最后一个。

首先,您的作业似乎允许重复(例如像 "passw0rdpassw0rdpassw0rd" 这样的密码),而您的方法不允许。这也是低效的。您可以使用 random.choice 三次代替。

字符串的连接使用 + 运算符完成,例如concatenation = str1 + str2 + str3join 函数。将 o 替换为 0 是通过字符串 class 方法 replace 完成的,例如concatenation.replace('o', '0').