2016-02-18 3 views
1

У меня есть программа (.exe), которая получает определенную информацию с сервера, и я хотел бы получить эту информацию из командной строки. Я начал Netcat и прислушался к порту программа использует для связи с его мишенью, потому что я хотел бы знать, что «запросы», чтобы сделать из сценария, и я получил это по Netcat, простой текст:Получить ответ TCP от сервера

net.tcp://[my ip address]:41012/Lapis.Btouch/ServerInfo 

I попробовал отправить именно это целевой (заменив мой IP для своего IP), используя socket.send(), но ничего не вернул. Что это значит и как я могу получить данные?

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('[server ip address]',41012)) 

while True: 
s.send('net.tcp://[server ip address]:41012/Lapis.Btouch/ServerInfo') 
response = s.recv(1024) 
print response 

s.close() 

Это код, который я использую, чтобы отправить запрос на целевой сервер. Он ничего не вернет, поэтому я думаю, что я не делаю запрос правильно. Спасибо за любую помощь.

+0

Какая ошибка вы получаете в настоящее время? Как цикл никогда не заканчивается? Кроме того, что возвращает s.connect? Успешно создано соединение сокета? –

+0

Да, соединение установлено, но никакого ответа от сервера нет. Он просто остается открытым. –

+0

Вы отправили правильный символ (и) сообщения, независимо от того, что они? (Может быть nuls, newline, возврат каретки, некоторая комбинация.) –

ответ

0

Попробуйте захватить сетевой пакет на порт 41012 через ТСРйитр или Wireshark или ...

Затем проверьте:

  1. делает ваш код отправить запрос?
  2. ответ отвечает вам?

Если ответ на вопрос (1) неверен, проблема заключается в стороне вас и вашей машины. так что идите и решите его (просмотрите свой код, проверьте свой брандмауэр и ...)

Если ответ на вопрос (1) имеет значение Истина, но сервер не отправляет никакого ответа (этот случай часто не случается) просмотрите ваш (проверьте URL-адрес или проверьте его через браузер или ...). также на основе сервера, к которому вы подключаетесь, возможно, для IP-адреса вашего устройства, распознанного для сервера (я имею в виду, что какой-то сервер дает ответ на запросы, которые поступают из известных IP-адресов, в этом случае вам нужно представить себя на сервере (например, добавить свой IP-адрес к доверенному списку на сервере), перед отправкой запроса)

Последний случай, если ответ на оба вопроса верен (я думаю, это ваша проблема), вы больше всего исправите свой код (response = s.recv(1024)), почему вы использовали 1024 для вашей длины ответа ?. Используйте правильные и точные параметры.

В python существует несколько способов получения ответа через сокет (с сервера), поиск stackoverflow и вы можете найти полезные советы и команды. такие команды, как использование неблокирующих способов, способов ascync и ...

+0

1 является правильным. 2 нет. Сервер ничего не вернет, он просто сохранит соединение. Я не знаю, посылает ли это значение способ получения данных, которые я хочу, это то, о чем спросила .exe, когда я подключил его к netcat. –

+0

Попробуйте открыть URL-адрес в браузере, если вы не получили ответа, URL-адрес неверен. Я думаю, может быть .exe передать параметры в методе POST. поэтому используйте wirehark и см. содержимое, отправленное на сервер с помощью .exe – MrRolling