Я пытаюсь сделать несколько циклов while, но почему-то они не работают.Я уже искал в Интернете, но ни одна из найденных проблем не имеет такой же проблемы.
Так вот код, содержащий только необходимую информацию.Я в основном открываю сокет, даю входные данные (i \ n) и получаю выходные данные на первом шаге.Я хочу продолжать получать вывод, пока в выводе не появятся какие-то конкретные символы ххх.Затем я хочу перейти к выражению elif в следующем цикле.
def netcat(h, p):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((h,p))
i = 0
a = True
while a == True:
socket_list=[sys.stdin, s]
r,w,x = select.select(socket_list, [], [])
if i==0:
time.sleep(1)
message = s.recv(1024)
print(message)
s.send("i\n")
sys.stdout.flush()
while "xxx" not in message:
message = s.recv(1024)
print(message)
i+=1
elif i==1:
print("+++++++++++++++++++++++++++")
i+=1
print("hello")
server.close()
Я ожидаю, что код будет печатать сообщение из оператора if, а затем печатать привет , затем сообщение из оператора elif и затем привет снова и снова, потому что цикл while все еще активен.Таким образом, в итоге это ожидаемый результат:
message
hello
+++++++++++++++++++++++++++
hello
hello
hello
hello...
То, что он действительно печатает, это
message
hello
, а затем он заканчивается.
Что я обнаружил, так это то, что еслиЯ закомментирую следующие строки:
while "xxx" not in message:
message = s.recv(1024)
print(message)
работает как положено. привет в конце кода выводится на экран снова и снова.Я просто не понимаю, почему этот второй цикл while имеет к этому какое-то отношение.Я был бы очень признателен за помощь здесь.
Так как рабочий код был запрошен, вот также полный код.Имя хоста и порт взяты из CTF, который все еще работает, поэтому вы будете взаимодействовать с CTF-сервером:
#!/usr/bin/env python
import socket
import time
import select
import sys
base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ ="
hostname = "18.188.70.152"
port = 36150
def netcat(h, p):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((h,p))
i = 0
a = True
b = True
while a == True:
socket_list=[sys.stdin, s]
r,w,x = select.select(socket_list, [], [])
if i==0:
time.sleep(1)
message = s.recv(1024)
print(message)
s.send("i\n")
sys.stdout.flush()
while "flag" not in message:
message = s.recv(1024)
print(message)
txtfile = message[9:38]
print(txtfile)
i+=1
elif i==1:
print("+++++++++++++++++++++++++++")
i+=1
print("hello")
server.close()
netcat(hostname, port)