Мне нужно проверить, прослушивает ли служба OpenVPN (ssl-vpn) определенный IP-адрес и порт из окна Linux. Я бы хотел сделать это с помощью сценария bash или кода на python или c / c ++, но это не проблема - я могу реализовать это, как только узнаю, как здесь работает UDP.
Моя проблема: служба VPN на удаленном компьютере настроена на использование UDP, и поскольку UDP не является протоколом, поддерживающим такие соединения, как TCP, я предполагаю, что любой ответ на сообщение / пакет, которое я отправил на удаленный компьютер, будет отправлен другому порт на моей локальной машине.
Я знаю netcat, но, очевидно, я не получу ответа, используя протокол UDP без установления соединения, поэтому проверяйте с помощью nc -u ip port
не сработает.
Итак, как мне проверить, действительно ли VPN работает за IP-адресом и портом.
Редактировать:
Можно ли эмулировать VPN с помощью сценария bash? Что-то вроде подключения к HELO, как в SMTP, и проверки, отправил ли сервер VPN ответ? Я бы знал, как это работает с tcp, но понятия не имею, как это сделать с UDP.
Edit2:
Я только что нашел этот ответ. Итак, как мне прослушивать пакеты ICMP, на которые нужно ответить, когда удаленный сервер недоступен? Возможно ли это с помощью bash / python / c / c ++ или netcat? Как мне узнать, прослушивает ли сервер запросы (тогда не должно быть ответа ICMP, верно?)?
Это из моего предыдущего ответа на аналогичный вопрос.
Как проверить, что сервер OpenVPN прослушивает удаленный порт без использования клиента OpenVPN?
Если вы используете аутентификацию tls (строка конфигурации tls-auth), это не работает, но вы можете получить представление о разговоре UDP.
import socket
senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00"
def checkserver(ip,port):
print('Checking %s:%s' %(ip,port))
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5) # in seconds
sock.connect((ip, port))
print("Sending request...")
sock.send(senddata)
try:
dta=sock.recv(100)
print("Server reply: %s" %(dta))
except:
print("Server not responding")
sock.close()
print("###########################################################")
def main():
checkserver("addr.of.server1",1194)
checkserver("addr.of.server2",1195)
if __name__ == "__main__":
main()
Я думаю, что единственный способ надежно проверить это - просто установить соединение с VPN.
Как вы сказали, OpenVPN при использовании TCP не может быть протестирован с использованием простого TCP-соединения. Я подозреваю, что единственный способ проверить это - использовать протокол OpenVPN.
Я полагаю, что можно было бы модифицировать клиента для тестирования, пока он не полностью подключился.