当前位置: 首页 > news >正文

检测服务端口是否开放的常用方法

检测服务端口是否开放的常用方法

文章目录

    • 检测服务端口是否开放的常用方法
      • 背景
      • 使用`nc`命令
      • 使用 `telnet` 命令
      • 使用 `curl` 命令
      • 使用 `openssl` 命令
      • 使用 Python 脚本,socket连接
      • 使用 `bash` 内建命令:
      • 使用 `nmap`:
      • 总结

背景

有时候需要测试网络是否连通,端口是否开放,需要用一些常用的命令来测试. 有时候并没有 telnet , nc 这样的命令 ,我们使用其他办法来测试 ,当然这里提供的方法 也仅供参考,根据服务器的情况来选择 不同的命令来测试 。下面总结一下 一些常用的命令 来方便策驰网络连通性的命令。

使用nc命令

nc -zv  ip  port 
nc -zv  domain  port 
 ~/ nc -zv  baidu.com 443   
Connection to baidu.com port 443 [tcp/https] succeeded!
 ~/ 

如果成功 会返回 相应的信息

使用 telnet 命令

telnet  [主机名或IP地址]  [端口号]
 ~/ telnet baidu.com 80       
Trying 110.242.68.66...
Connected to baidu.com.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

上面显示 是成功状态

 ~/ telnet baidu.com 81       
Trying 39.156.66.10...


Connection failed: Operation timed out
Trying 110.242.68.66...

上面显示是失败状态 。

使用 curl 命令

如果服务器上有 curl,你可以尝试用它来测试HTTPS端口(443)或HTTP端口(80)。对于6443端口,如果这是一个HTTPS服务的非标准端口,你可以这样做:

curl  -v  http://ip:port 

curl -v  https://ip:port 
curl -v https://172.19.127.13:6443

-v 选项会显示详细的输出,包括连接过程中的信息,这有助于判断端口是否开放。

 curl -v  https://172.19.127.13:6443
* About to connect() to 172.19.127.13 port 6443 (#0)
*   Trying 172.19.127.13...
* Connected to 172.19.127.13 (172.19.127.13) port 6443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* Server certificate:
*       subject: CN=kube-apiserver-c85ad7b2e9eb242b1ac68840c6101b85b
*       start date: Sep 05 06:25:00 2024 GMT
*       expire date: Aug 29 06:25:00 2054 GMT
*       common name: kube-apiserver-c85ad7b2e9eb242b1ac68840c6101b85b
*       issuer: CN=kubernetes,O=hangzhou+O=alibaba cloud
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* Closing connection 0
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

使用 openssl 命令

如果端口443是为TLS/SSL服务(如HTTPS、SMTPS等)使用的,你可以使用 openssl 来测试连接:

openssl s_client -connect www.baidu.com:443

使用 openssl s_client 测试端口是否开放是可行的,但前提是目标端口运行的是 SSL/TLS 服务

openssl s_client -connect www.baidu.com:443
CONNECTED(00000003)
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018
verify return:1
depth=0 C = CN, ST = beijing, L = beijing, O = "Beijing Baidu Netcom Science Technology Co., Ltd", CN = baidu.com
verify return:1
---
Certificate chain
 0 s:C = CN, ST = beijing, L = beijing, O = "Beijing Baidu Netcom Science Technology Co., Ltd", CN = baidu.com
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Jul  8 01:41:02 2024 GMT; NotAfter: Aug  9 01:41:01 2025 GMT
 1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018
   i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Nov 21 00:00:00 2018 GMT; NotAfter: Nov 21 00:00:00 2028 GMT
 2 s:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
   a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
   v:NotBefore: Sep 19 00:00:00 2018 GMT; NotAfter: Jan 28 12:00:00 2028 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIJ7DCCCNSgAwIBAgIMTkADpl62gfh/S9jrMA0GCSqGSIb3DQEBCwUAMFAxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSYwJAYDVQQDEx1H
bG9iYWxTaWduIFJTQSBPViBTU0wgQ0EgMjAxODAeFw0yNDA3MDgwMTQxMDJaFw0y
NTA4MDkwMTQxMDFaMIGAMQswCQYDVQQGEwJDTjEQMA4GA1UECBMHYmVpamluZzEQ
MA4GA1UEBxMHYmVpamluZzE5MDcGA1UEChMwQmVpamluZyBCYWlkdSBOZXRjb20g
U2NpZW5jZSBUZWNobm9sb2d5IENvLiwgTHRkMRIwEAYDVQQDEwliYWlkdS5jb20w
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1wFMskJ2dseOqoHptNwot
FOhdBERsZ4VQnRNKXEEXMQEfgbNtScQ+C/Z+IpRAt1EObhYlifn74kt2nTsCQLng
jfQkRVBuO/6PNGKdlCYGBeGqAL7xR+LOyHnpH9mwCBJc+WVt2zYM9I1clpXCJa+I
tsq6qpb1AGoQxRDZ2n4K8Gd61wgNCPHDHc/Lk9NPJoUBMvYWvEe5lKhHsJtWtHe4
QC3y58Vi+r5R0PWn2hyTBr9fCo58p/stDiRqp9Irtmi95YhwkNkmgwpMB8RhcGoN
h+Uw5TkPZVj4AVaoPT1ED/GMKZev0+ypmp0+nmjVg2x7yUfLUfp3X7oBdI4TS2hv
AgMBAAGjggaTMIIGjzAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADCBjgYI
KwYBBQUHAQEEgYEwfzBEBggrBgEFBQcwAoY4aHR0cDovL3NlY3VyZS5nbG9iYWxz
aWduLmNvbS9jYWNlcnQvZ3Nyc2FvdnNzbGNhMjAxOC5jcnQwNwYIKwYBBQUHMAGG
K2h0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzcnNhb3Zzc2xjYTIwMTgwVgYD
VR0gBE8wTTBBBgkrBgEEAaAyARQwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu
Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCAYGZ4EMAQICMD8GA1UdHwQ4MDYw
NKAyoDCGLmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3Nyc2FvdnNzbGNhMjAx
OC5jcmwwggNhBgNVHREEggNYMIIDVIIJYmFpZHUuY29tggxiYWlmdWJhby5jb22C
DHd3dy5iYWlkdS5jboIQd3d3LmJhaWR1LmNvbS5jboIPbWN0LnkubnVvbWkuY29t
ggthcG9sbG8uYXV0b4IGZHd6LmNuggsqLmJhaWR1LmNvbYIOKi5iYWlmdWJhby5j
b22CESouYmFpZHVzdGF0aWMuY29tgg4qLmJkc3RhdGljLmNvbYILKi5iZGltZy5j
b22CDCouaGFvMTIzLmNvbYILKi5udW9taS5jb22CDSouY2h1YW5rZS5jb22CDSou
dHJ1c3Rnby5jb22CDyouYmNlLmJhaWR1LmNvbYIQKi5leXVuLmJhaWR1LmNvbYIP
Ki5tYXAuYmFpZHUuY29tgg8qLm1iZC5iYWlkdS5jb22CESouZmFueWkuYmFpZHUu
Y29tgg4qLmJhaWR1YmNlLmNvbYIMKi5taXBjZG4uY29tghAqLm5ld3MuYmFpZHUu
Y29tgg4qLmJhaWR1cGNzLmNvbYIMKi5haXBhZ2UuY29tggsqLmFpcGFnZS5jboIN
Ki5iY2Vob3N0LmNvbYIQKi5zYWZlLmJhaWR1LmNvbYIOKi5pbS5iYWlkdS5jb22C
EiouYmFpZHVjb250ZW50LmNvbYILKi5kbG5lbC5jb22CCyouZGxuZWwub3JnghIq
LmR1ZXJvcy5iYWlkdS5jb22CDiouc3UuYmFpZHUuY29tgggqLjkxLmNvbYISKi5o
YW8xMjMuYmFpZHUuY29tgg0qLmFwb2xsby5hdXRvghIqLnh1ZXNodS5iYWlkdS5j
b22CESouYmouYmFpZHViY2UuY29tghEqLmd6LmJhaWR1YmNlLmNvbYIOKi5zbWFy
dGFwcHMuY26CDSouYmR0anJjdi5jb22CDCouaGFvMjIyLmNvbYIMKi5oYW9rYW4u
Y29tgg8qLnBhZS5iYWlkdS5jb22CESoudmQuYmRzdGF0aWMuY29tghEqLmNsb3Vk
LmJhaWR1LmNvbYISY2xpY2suaG0uYmFpZHUuY29tghBsb2cuaG0uYmFpZHUuY29t
ghBjbS5wb3MuYmFpZHUuY29tghB3bi5wb3MuYmFpZHUuY29tghR1cGRhdGUucGFu
LmJhaWR1LmNvbTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHwYDVR0j
BBgwFoAU+O9/8s14Z6jeb48kjYjxhwMCs+swHQYDVR0OBBYEFK3KAFTK2OWUto+D
2ieAKE5ZJDsYMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdgCvGBoo1oyj4KmK
TJxnqwn4u7wiuq68sTijoZ3T+bYDDQAAAZCQAGzzAAAEAwBHMEUCIFwF5Jc+zyIF
Gnpxchz9fY1qzlqg/oVrs2nnuxcpBuuIAiEAu3scD6u51VOP/9aMSqR2yKHZLbHw
Fos9U7AzSdLIZa8AdgAS8U40vVNyTIQGGcOPP3oT+Oe1YoeInG0wBYTr5YYmOgAA
AZCQAG3iAAAEAwBHMEUCIBBYQ6NP7VUDgfktWRg5QxT23QAbTqYovtV2D9O8Qc0T
AiEA2P7+44EvQ5adwL1y56oyxv/m+Gujeia7wpo7+Xbhv6MAdwAN4fIwK9MNwUBi
EgnqVS78R3R8sdfpMO8OQh60fk6qNAAAAZCQAGy+AAAEAwBIMEYCIQDU7Hxtx4c9
p9Jd+cr+DCMtyRYSc0b8cktCcbMmtDE9ygIhAIpJd4yb7jtxnaEC8oLWDushbK1v
0BIuZu6YrQvsf1nQMA0GCSqGSIb3DQEBCwUAA4IBAQCh9DfewC012/+fHZpmSpCn
y+h3/+ClAZ8cJVO+LCmYz9r6bkyhcFquJ5qUpyoW8AYtU0oUFlqH6zLIyujW+7lq
wFxB6NsXKKdwBKmMbmnZr2Fca5f+TtwD/GDJgG/egr7fI1u8194j9KEl8cK8Fujm
+UsoWklEzd1It9xkLazJR/6SwbhSR4k610pvj8rQrS4wAewuYFDaDOfqsHtDIsx1
tZfIfoB/O1wGWZQJU2M9wC8uYq0jQ2Q0MQJXuyJz04MFiGrPAS1Uk8mWd8M+3p65
Xy4iAf8uWzs1M+fcwBE8BNBghkQgE+FSUsldm+5ZBCazU0joJswzldWisXMLTagI
-----END CERTIFICATE-----
subject=C = CN, ST = beijing, L = beijing, O = "Beijing Baidu Netcom Science Technology Co., Ltd", CN = baidu.com
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 5414 bytes and written 445 bytes
Verification error: unable to get local issuer certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 6A43A459770A4FC6918EA7BFF3004ECFB94F6960911314356A048A2AF074998B
    Session-ID-ctx: 
    Master-Key: 2370DEA3AACC0D869E337B8B99C80C44A190B31AB9F2DEE58CD16F0CE1EA8AC0E23CB0063A0587099EF2F5F557417EC8
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket:
    0000 - cc 95 13 98 05 87 6f 12-cd de d9 e9 cc e0 cc f7   ......o.........
    0010 - 0e 0a 9d 46 76 4b d9 a0-8d da be 48 7a 69 cb cc   ...FvK.....Hzi..
    0020 - 00 b7 2e 5f e9 c9 08 0a-05 57 f9 8d 8c 8c 7a 3d   ..._.....W....z=
    0030 - 77 45 fd 6c fa 59 0e 35-b1 35 a7 58 2e 02 e5 eb   wE.l.Y.5.5.X....
    0040 - 35 af 92 ad 62 58 88 12-39 ed 02 fd 25 c5 e4 89   5...bX..9...%...
    0050 - 7e 8a bf 9e 87 02 4b d7-39 be c7 fc 09 27 7e 5d   ~.....K.9....'~]
    0060 - c6 af 8d 48 13 f1 97 fe-58 fa 4b 17 01 77 f5 4d   ...H....X.K..w.M
    0070 - d4 fd 1d b6 01 69 83 2d-df e7 c3 a3 45 eb c5 f9   .....i.-....E...
    0080 - 9c 50 cd f6 60 41 d5 44-cb ce 2a 3a af 08 92 c9   .P..`A.D..*:....
    0090 - 11 d0 d5 39 f9 be c0 60-3f 2f 59 bf 71 a0 76 d7   ...9...`?/Y.q.v.

    Start Time: 1740298678
    Timeout   : 7200 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
    Extended master secret: no
---

HTTP/1.1 400 Bad Request

closed

  • 命令成功连接到目标服务器(CONNECTED(00000003)),说明目标端口(443)是开放的。

    使用 Python 脚本,socket连接

    如果服务器上安装了Python,你可以编写一个简单的Python脚本来测试端口连接。以下是一个Python3的例子:

    import socket
    
    
    def check_tcp_port(ip, port, timeout=5):
        """
        检查指定的 TCP 端口是否开放。
    
        参数:
        - ip (str): 目标主机的 IP 地址。
        - port (int): 要检查的端口号。
        - timeout (int): 设置超时时间(秒),默认为 5 秒。
    
        返回值:
        - 如果端口开放,返回 True;否则返回 False。
        """
        try:
            # 创建一个 TCP 套接字
            # socket.SOCK_STREAM:表示使用 TCP 协议(面向连接的流式协议)
            # socket.AF_INET:表示使用 IPv4 协议
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
                sock.settimeout(timeout)  # 设置超时时间
                result = sock.connect_ex((ip, port))  # 尝试连接目标地址和端口
                if result == 0:
                    print(f"端口 {port} 是开放的")
                    return True
                else:
                    print(f"端口 {port} 可能被关闭或无法访问")
                    return False
        except Exception as e:
            # 捕获异常并打印错误信息
            print(f"发生错误: {e}")
            return False
    
    
    # 示例调用
    if __name__ == "__main__":
        target_ip = '139.xxx.xxx.235'
        target_port = 22
        is_open = check_tcp_port(target_ip, target_port)
        if is_open:
            print(f"端口状态:{target_port} 开放")
        else:
            print("端口状态:关闭或不可访问")
    
    

    使用 bash 内建命令:

    您也可以利用 bash 的 /dev/tcp 功能来检查端口(请注意,这种方法在某些版本的 bash 中可能不工作,例如在基于 BusyBox 的系统中):

    timeout 5 bash -c "echo > /dev/tcp/172.19.127.13/6443" && echo "端口6443是开放的" || echo "端口6443可能被关闭或无法访问"
    

timeout 5

  • timeout 是 Linux 系统中的一个命令,用于限制后续命令的执行时间。
  • 在这里,timeout 5 表示后续命令最多运行 5 秒钟,如果超过这个时间,就会被强制终止

这个命令是用来测试一个特定的TCP端口是否开放的。我们可以将它分解为几个部分来详细解释其功能和原理:

命令分解

  1. timeout 5

    • timeout 是 Linux 系统中的一个命令,用于限制后续命令的执行时间。
    • 在这里,timeout 5 表示后续命令最多运行 5 秒钟,如果超过这个时间,就会被强制终止。
  2. bash -c “echo > /dev/tcp/172.19.127.13/6443”

    • bash -c 允许我们直接在 bash 中执行一段命令字符串。
    • /dev/tcp/<host>/<port> 是 Bash 提供的一种伪文件系统,用于简化 TCP 连接的操作。通过写入 /dev/tcp/<host>/<port>,实际上是在尝试与指定的主机和端口建立一个 TCP 连接。
    • echo > /dev/tcp/172.19.127.13/6443 的作用是向目标地址 172.19.127.13 的端口 6443 发起连接请求,并尝试发送空数据(echo 输出为空)。
  3. && echo “端口6443是开放的”

    • && 是逻辑“与”操作符。只有当前面的命令成功执行时(即返回状态码为 0),后面的命令才会被执行。
    • 如果连接成功,则输出 "端口6443是开放的"
  4. || echo “端口6443可能被关闭或无法访问”

    • || 是逻辑“或”操作符。如果前面的命令失败(返回状态码非 0),则执行后面的命令。
    • 如果连接失败,则输出 "端口6443可能被关闭或无法访问"

原理解析

  • TCP 连接机制
    当使用 /dev/tcp/<host>/<port> 时,Bash 会尝试与指定的主机和端口建立一个 TCP 连接。如果目标端口开放且网络可达,连接会成功;否则,连接会失败或超时。

  • 超时机制
    使用 timeout 命令是为了避免在网络不可达或目标端口响应缓慢的情况下,命令长时间挂起。设置超时时间为 5 秒可以有效控制等待时间。

  • 状态码判断
    Bash 命令执行后会返回一个状态码:

    • 状态码为 0 表示命令成功执行。
    • 状态码非 0 表示命令执行失败。
      根据状态码的不同,选择性地执行不同的输出。

注意事项

  1. Bash 版本要求

    • /dev/tcp/<host>/<port> 是 Bash 内置的功能,因此需要确保使用的 Shell 是 Bash,并且版本支持该功能。
  2. 权限问题

    • 某些情况下,可能需要足够的权限才能发起网络连接。如果命令失败,可以检查当前用户的权限。
  3. 防火墙或网络限制

    • 即使目标端口本身是开放的,也可能因为防火墙、路由器规则或其他网络配置导致连接失败。

这条命令的核心功能是通过 Bash 的内置 TCP 功能测试某个远程主机的指定端口是否开放,并结合 timeout 控制超时时间,最后根据连接结果输出相应的信息。

写一个 shell 脚本来检测

#!/bin/bash

# 设置目标主机和端口
HOST="172.19.127.13"
PORT="6443"
TIMEOUT=5

# 尝试连接目标主机的指定端口,并设置超时时间
if timeout $TIMEOUT bash -c "echo > /dev/tcp/$HOST/$PORT" &>/dev/null; then
    # 如果连接成功,输出端口开放的消息
    echo "端口$PORT是开放的"
else
    # 如果连接失败或超时,输出端口关闭或无法访问的消息
    echo "端口$PORT可能被关闭或无法访问"
fi

使用 nmap:

如果发现命令不存在, 手动安装一下这个命令

sudo yum install -y  nmap

如果服务器上有 nmap,可以使用它来扫描端口:

nmap  -p  <port>  <host>
  • -p 6443:指定要扫描的端口号为 6443
# nmap -p 6443 172.19.127.13

Starting Nmap 6.40 ( http://nmap.org ) at 2025-02-23 16:11 CST
Nmap scan report for 172.19.127.13
Host is up (0.0024s latency).
PORT     STATE SERVICE
6443/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
 nmap -p 443  www.zhiexa.com

Starting Nmap 6.40 ( http://nmap.org ) at 2025-02-23 16:10 CST
Nmap scan report for www.zhiexa.com (106.15.73.115)
Host is up (0.00053s latency).
PORT    STATE SERVICE
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.56 seconds

总结

本文简单总结常用的测试端口的命令, 方便以后忘记了来看看,做个记录,最常用的 nc telnet 其次我喜欢用 curl
如果你喜欢欢迎点赞或关注!

分享快乐,留住感动. '2025-02-23 16:27:39' --frank

相关文章:

  • mysql的可重复读隔离级别解决了不可重复读和大部分幻读
  • 在 JavaScript 中,[](空数组)不是假值,它是“真值”(truthy)
  • 修改与 Git 相关的邮箱
  • 各种以太坊Rollup技术
  • 微信小程序-二维码绘制
  • PHP-create_function
  • 力扣3464. 正方形上的点之间的最大距离
  • 【jira】用到几张表
  • rust笔记9-引用与原始指针
  • 免费PDF工具
  • 算法与数据结构(不同路径)
  • 滴水逆向_引用_友元函数_运算符重载
  • 机器学习数学基础:37.偏相关分析
  • java编译和c语言编译区别
  • CPU多级缓存机制
  • 前端面试题之HTML篇
  • 虚拟机PING不通百度?NAT是什么?什么仅主机?
  • HarmonyOS 5.0应用开发——鸿蒙接入高德地图实现POI搜索
  • 安装 Milvus Java SDK
  • 突破性能极限:DeepSeek开源FlashMLA解码内核技术解析
  • 网站建设服务器百度云/苏州seo服务
  • 汉阴做网站/国外域名注册网站
  • 郑州网站建设seo优化/建设网站推广
  • 真人视频发牌网站开发/广州网络运营课程培训班
  • 真人男女直接做的视频网站/西安seo外包服务
  • 风景网站模板/哪个搜索引擎最好用