我需要testing一个OpenVPN服务(ssl-vpn)是否正在监听一个特定的IP地址和端口从一个Linux机器。 我想用bash脚本或python或c / c ++中的一些代码来做到这一点,但这不是问题 – 只要我知道UDP是如何工作的,我就可以实现它。
我的问题是:远程计算机上的VPN服务configuration为使用UDP,因为UDP不是支持TCP连接的协议。我假设我发送给远程计算机的消息/端口在我的本地机器上。
我知道netcat,但显然我不会收到使用无连接UDP协议的答案,所以使用nc -u ip port检查将不起作用。
那么,我该如何检查VPN是否真的启动并在IP地址和端口后面运行。
编辑:
是否有可能使用bash脚本来模拟VPN? 就像在SMTP中连接HELO一样,并检查VPN服务器是否发回答案? 我会知道这是如何与TCP工作,但我不知道如何用UDP做到这一点。
EDIT2:
我刚刚find了这个答案 。 那么,如何收听当远程服务器不可用时应该回答的ICMP包呢? 用bash / python / c / c ++或netcat可以吗? 我怎么知道服务器是否在那里,听取请求(不应该有ICMP响应,对吧?)?
唯一的办法,我认为你可以可靠地testing这将是build立一个连接到VPN。
正如你所说的使用TCP的OpenVPN不能使用简单的TCP连接进行testing。 我怀疑testing的唯一方法就是说OpenVPN协议。
我可以修改客户端进行testing,而不是完全连接。
这是我以前对类似问题的回答。
如何检查OpenVPN服务器是否正在监听远程端口而不使用OpenVPN客户端?
如果您使用tls身份validation(tls-authconfiguration行),这是行不通的,但您可以得到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()