использование Python для проверки соединений lnet с серверами - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь использовать te lnet для проверки сервисных подключений к серверу. Это код, который я использовал:

p = subprocess.run("telnet localhost 80", shell=True, universal_newlines=True, stdout=subprocess.PIPE)
print(p.stdout)

, если я запускаю его, появляется пустой ответ, и кажется, что lnet ожидает тайм-аут в фоновом режиме, пока я не нажму ctrl+c.

Если я запускаю следующий код:

p = subprocess.run("telnet localhost 80", shell=True, universal_newlines=True)

ответ следующий:

Trying ::1...
Connected to localhost.
Escape character is '^]'.

Если я хочу использовать этот сценарий для проверки соединений с серверами, как пройти ctrl+] и «выйти», чтобы выйти из приглашения te lnet? Кроме того, если я хочу проверить ответы, используя "GET /" для te lnet, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Попробуйте:

proc = subprocess.Popen(['lsof', '-iTCP', -'sTCP:LISTEN', '-n' ,'-P'], stdout=subprocess.PIPE)
tmp = proc.stdout.read()
0 голосов
/ 17 апреля 2020

Вам нужно будет использовать subprocess.Popen() и взаимодействовать с процессом telnet с использованием потоков stdin / stdout результирующего всплывающего объекта.

Но - вам действительно нужно выложить на te lnet ? Если вам нужно только знать, является ли что-то подключаемым,

import socket
s = socket.socket()
s.connect(('localhost', 80))
s.close()

сгенерирует исключение в случае сбоя подключения; если вам нужно выполнить простой пинг / понг,

import socket
s = socket.socket()
s.connect(('localhost', 80))
s.sendall(b'Hello? Are you there?\n')
print(s.recv(8192))
s.close()

может быть достаточно.

(хотя вам может понадобиться добавить таймауты и тому подобное.)

...