如何在不使用OpenVPN客户端的情况下检查OpenVPN服务器正在侦听远程端口?


39

我需要检查OpenVPN(UDP)服务器是否已启动并且可以在给定的host:port上访问。

我只有一台普通的Windows XP计算机,没有OpenVPN客户端(也没有安装它的机会),也不需要连接服务器的密钥-我只是配置常用的WinXP命令行工具,浏览器和PuTTY。

如果我正在测试SMTP或POP3服务器之类的东西,我将使用telnet并查看其是否响应,但是如何使用OpenVPN(UDP)执行此操作?


如果openvpn通过tcp运行,那么您也可以进行telnet
rvs

OpenVPN通过UDP运行
Ivan

2
您能否详细说明为什么要从过时的Windows系统而不是真正的监视系统解决此问题?
亚历克斯·霍尔斯特

2
如果UDP openvpn服务器使用(推荐)tls-auth配置选项,则它是不可能的(如果您至少没有外部包装器密钥)!任何具有不正确的HMAC签名的数据包都将被丢弃,服务器不会响应。
Alex Stragies 2015年

Answers:


51

这是一个单线壳:

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-authconfig选项未激活时,此方法才有效,否则服务器将拒绝具有错误HMAC的消息。


2
我得到一些不同,但是我得到了一些。谢谢。
artfulrobot

7
显而易见,这是针对Linux / Unix,而不是Windows。而且它需要netcat(某些发行版中默认未安装)。另外,如果您的Linux发行版没有“ timeout”命令,则只需使用netcat的“ -w”参数,例如“ nc -w 10 -u openvpnserver.com 1194”。
MV。

1
这真是太棒了。
dmourati 2013年

2
如果服务器使用tls-authconfig选项丢弃带有错误HMAC信号的数据包,则在OP方案中将无法使用。
Alex Stragies 2015年

2
我发现管道传输od -x -N 14而不是管道传输cat -v更为有用,因为您可以a)查看实际的二进制内容而不是ASCII垃圾,并且b)在服务器发送每个握手数据包并在第一个握手数据包之后立即停止时,立即接收每一行输出。-N 14因为握手包的长度为14个字节,并且只是重复。
BaseZen

5

抱歉,我的回答有点迟了;)
发送带有以下内容的udp数据包:
$ 38 $ 01 $ 00 $ 00 $ 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()

1
正如Loic的回答所说,这不适用于tls-auth
tedder42 '16

1
对于Python 3,第10行会引起问题。将“ sock.send(senddata)”替换为“ sock.send(senddata.encode())”,它将起作用。
NDB

2

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

#netstat -ltnup

这应该列出正在服务器/系统上侦听的所有进程。Grep输入所需的端口号

#netstat -ltnup | grep 1194

OP仅具有Windows XP工具。
user9517支持GoFundMonica

1
@Iain:OP具有PuTTY,因此可能可以通过SSH进入服务器。在这种情况下,这种非常简单的检查是有用的第一步。
mivk

2

对于试图监视已tls-auth启用服务器的人员,您可以在此处使用python脚本:https : //github.com/liquidat/nagios-icinga-openvpn

输出经过格式化可以在Nagios或Icinga中使用,但是只要您拥有python和tls密钥文件,它就可以由任何人/任何人运行。

例如,如果您将其SHA256用作摘要,则可以使用以下方法:

python check-openvpn.py -p 1194 --tls-auth ta.key --digest SHA256 vpn-server.example.com

注意:您可能需要--tls-auth-inverse根据服务器的key-direction值添加。


0

如果您可以获取有效的OpenVPN Client与OpenVPN服务器交互的信息,则可以按照TiZon的建议,使用诸如netcat之类的模型来对初始数据包进行建模。

基本上,您希望有足够的有效第一个数据包来使服务器至少响应一条错误消息,因此它不一定是完美的,就足够了。

我尝试访问http://pcapr.net,但是在那里没有看到OpenVPN示例。也许,如果其他人声称服务已启动,则可以让其他人抢购该交易的费用。


-5

如果您在TCP监听器上设置了openvpn,则其操作非常简单

telnet vpnserver 1194

假设1194是您监听的端口

这应该给您某种响应,以显示openvpn服务器正在侦听


您100%确定吗?当我这样做时,经过一会儿等待,我得到“无法打开与主机的连接,端口1194:连接失败”。在OpenVPN服务器响应之前,客户端不是要先说些什么吗?
伊凡

6
请注意,默认情况下,OpenVPN仅适用于UDP,而telnet则使用TCP。
伊凡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.