У меня возникли проблемы с определением точной проблемы в моем коде. У меня есть две функции: inrange()
, которая проверяет, находится ли порт в диапазоне, и filt()
, который берет txt-файл, ищет ключевые слова «UDP» или «TCP», смотрит на порт (сразу после знака: , и проверяет, находится ли это число в пределах диапазона или нет.возвращение отрицательных результатов в цикле
def inrange(file,character, num):
with open(file, 'r') as r:
for lines in r:
for key, value in sshd.items():
if character == key and character in lines:
if num in sshd.get(character):
return True
else:
return False
elif character == key and character in lines:
if num in sshd.get(character):
return True
else:
return False
Это специально для sshd пока.
def filt(file):
with open(file, 'r') as r:
for i, line in enumerate(r):
if "sshd" in line:
plusOne = i + 1
newline = line.strip()
splitIt = newline[7:22]
my_string = splitIt.split(":", 1)[1]
if inrange(file, "TCP", int(my_string)):
print("Line " + str(plusOne) + " is in range" + " " + my_string)
elif inrange(file, "UDP", int(my_string)):
print("Line " + str(plusOne) + " is in range" + " " + my_string)
else:
print("Not in range")
Теперь это работает, если у меня есть это как мой текст файл-
активных соединений
Proto Local Address Foreign Address State PID
UDP 0.0.0.0:123 0.0.0.0:0 LISTENING 5987 sshd
, как вы можете видеть, UDP 123 находится в пределах диапазона, если вы посмотрите на словарю sshd
выше , Я получаю истинное заявление взамен. Если я изменю UDP на TCP, он вернет отрицательный результат. Это работает. Проблема возникает, когда я добавляю к ней несколько строк.
Active Connections
Proto Local Address Foreign Address State PID
UDP 0.0.0.0:123 0.0.0.0:0 LISTENING 5987 sshd
TCP 0.0.0.0:123 0.0.0.0:0 LISTENING 5987 sshd
UDP 0.0.0.0:123 0.0.0.0:0 LISTENING 5987 sshd
TCP 0.0.0.0:123 0.0.0.0:0 LISTENING 5987 sshd
я получить обратно все положительные результаты:
Line 5 is in range 123
Line 6 is in range 123
Line 7 is in range 123
Line 8 is in range 123
, который не должен быть случай, так как строка 6 и 8 представляют собой линии ПТС в порт 123, который не находится в диапазоне. Я чувствую, что мне не хватает чего-то здесь. Не могу понять это.
Один вопрос быстрой отладки - какая строка кода выполняет печать? Возможно, ваши вызовы 'print' будут похожи на' Line ... - это строка UDP в диапазоне ... '. Это может помочь определить ошибку – dwanderson
Почему разделы 'if' и' elif' в функции 'inrange' идентичны? –
@ PM2Ring Забыл об этом. Я добавил ввод символов в мою функцию ввода. –