Python TCP端口扫描程序

时间:2017-02-06 15:59:40

标签: python python-2.7 port port-scanning

我正在尝试在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 个答案:

答案 0 :(得分:3)

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

''.join(data[:3])

并使用o替换0使用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]

[...]

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:1)

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

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

OR

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

尝试上一个。

答案 3 :(得分:1)

首先,你的任命似乎允许重复(例如密码,如#34; passw0rdpassw0rdpassw0rd"),而你的方法不是。它效率也很低。您可以使用random.choice三次。

字符串的连接是使用+运算符完成的,例如concatenation = str1 + str2 + str3join功能。使用字符串类方法replace替换o为0,例如concatenation.replace('o', '0')