如何检查OpenVPN服务器是否正在监听远程端口而不使用OpenVPN客户端?

我需要检查一个OpenVPN(UDP)服务器是否启动,并在给定的主机:端口上可访问。

我只有一台普通的Windows XP计算机,没有OpenVPN客户端(也没有机会安装它),也没有连接到服务器的密钥 – 只有普通的WinXP命令行工具,浏览器和PuTTY在我的configuration中。

如果我正在testing像SMTP或POP3 servert的东西,我会使用telnet,看看它是否响应,但如何与OpenVPN(UDP)做到这一点?

这里是一个单一的shell:

 echo -e "\x38\x01\x00\x00\x00\x00\x00\x00\x00" | timeout 10 nc -u openvpnserver.com 1194 | cat -v 

如果在另一端有一个openvpn,输出将会是

 @$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X... 

否则会在10秒后静音和超时或显示不同的内容。

注意:只有在tls-auth config选项没有激活时才有效,否则服务器拒绝不正确的HMAC消息。

对不起,如果我的答案有点晚了;)
发送包含以下内容的udp数据包:
$ $ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 00
服务器必须回应一些事情。
你可以像这样用python伪造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() 

如果你能得到一个有效的OpenVPN客户端到OpenVPN服务器交互的pcap,你可以像TiZon所build议的那样,使用类似netcat的一些东西来build模数据包。

基本上,你想有足够的有效的第一个数据包,让服务器至less有一个错误信息,所以它不必是完美的,只是够好的。

我试图去http://pcapr.net ,但我没有看到一个OpenVPN的例子。 也许,如果别人声称服务已经启动,那么你可以让另外一个人抓住一笔交易。

您可以尝试在CLI中运行以下命令

 #netstat -ltnup 

这应该列出正在服务器/系统上侦听的所有进程。 grep为你想要的端口号

 #netstat -ltnup | grep 1194 

如果你已经设置openvpn上一个TCP侦听,那么它就像

 telnet vpnserver 1194 

假设1194是您正在监听的端口

这应该给你一些回应,以显示openvpn服务器正在监听