2017-02-06 5 views
2

Я пытаюсь создать сканер TCP-порта в Python, который принимает несколько аргументов (-all (отображает все порты, как открытые, так и закрытые для цели), -open (отображает только открытые порты на целевой), -target (указать целевой IP, подсеть или имя хоста) и -range (указать диапазон портов).Сканер портов TCP Python

В настоящее время мне удалось только указать параметры, используемые в программе, мой код выглядит следующим образом:

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

Я не уверен, как продолжить с программой, в частности, с -Все/-open варианты, любая помощь будет принята с благодарностью.

+0

начать с получения отфильтрованного суб-списка, содержащего все слова, для которых условие '' e 'не в слове' является 'истинным'. Затем вам нужно будет сделать декартовское умножение этого списка. У вас будут 'N^3' возможные строки, где' N' - количество слов после фильтрации – SomethingSomething

+0

Я думаю, что наиболее интуитивно понятным способом реализации является использование 3 вложенных циклов, которые все работают на ваших отфильтрованных словах, а затем просто объединяют их и выполните операции «find-replace». – SomethingSomething

+0

При попытке взломать (перебор) пароль с тремя случайными словами из вашего файла не будет иметь большого смысла, вам систематически нужно попробовать все возможные комбинации. Также есть файл 'randomwords.txt' с историей?Если это так, вы должны начать с создания набора слов-кандидатов (без дубликатов, без слов, содержащих 'e', заменить' o') – mata

ответ

1

Я модифицированный один ответ публикуемый здесь, На самом деле я хотел отредактировать этот ответ, но удалить его автором.
Try После:

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

Попробуйте последний.

3

Обычно используется str.join для создания новой строки из нескольких строк:

''.join(data[:3]) 

и заменить o с 0 использования 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] 

[...] 
1

Во-первых, ваше назначение, по-видимому, позволяет повторы (например, пароли типа passw0rdpassw0rdpassw0rd), в то время как ваш метод этого не делает. Это также неэффективно. Вместо этого вы можете использовать random.choice.

Конкатенация строк выполняется с помощью оператора +, например. concatenation = str1 + str2 + str3, или join функция. Замена o на 0 выполняется методом класса строк replace, например. concatenation.replace('o', '0').