场景

在给客户公司部署服务的时候,可能由于他们网络策略的原因,需要到服务器内验证当前服务器是否可以访问另一条服务器的某个端口

如果服务器里有 telnet、nc,那就没什么问题,它们都可以用来测试连通性,但是有些客户提供的服务器没有这些命令,也不允许联网安装,这种情况下很难验证

但是 linux 服务器内都会内置有 python,所以我们可以写一个 python 脚本来测试,下面针对 python2 和 python3 都提供了一个脚本

脚本

python2 脚本

nettest.py

import socket
import sys

def test_mysql_connection(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(2)
        result = sock.connect_ex((host, port))
        if result == 0:
            print "success %s:%d" % (host, port)
        else:
            print "fail %s:%d" % (host, port)
        sock.close()
    except socket.error as e:
        print "error: %s" % e

if "__main__" == __name__:
    if len(sys.argv) != 3:
        print "usage: python script.py <host> <port>"
        sys.exit(1)
    host = sys.argv[1]
    try:
        port = int(sys.argv[2])
    except ValueError:
        print "port must integer"
        sys.exit(1)
    test_mysql_connection(host, port)

使用

python nettest.py 10.0.12.11 3306

python3 脚本

import socket
import sys

def test_mysql_connection(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(2)
        result = sock.connect_ex((host, port))
        if result == 0:
            print(f"success {host}:{port}")
        else:
            print(f"fail {host}:{port}")
        sock.close()
    except socket.error as e:
        print(f"error: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("usage: python script.py <host> <port>")
        sys.exit(1)
    host = sys.argv[1]
    try:
        port = int(sys.argv[2])
    except ValueError:
        print("port must be an integer")
        sys.exit(1)
    test_mysql_connection(host, port)

使用

python nettest.py 10.0.12.11 3306