检测服务端口是否开放的常用方法
检测服务端口是否开放的常用方法
文章目录
- 检测服务端口是否开放的常用方法
- 背景
- 使用`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.crtCApath: 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.htmlcurl performs SSL certificate verification by default, using a "bundle"of Certificate Authority (CA) public keys (CA certs). If the defaultbundle file isn't adequate, you can specify an alternate fileusing the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented inthe bundle, the certificate verification probably failed due to aproblem with the certificate (it might be expired, or the name mightnot match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, usethe -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 chain0 s:C = CN, ST = beijing, L = beijing, O = "Beijing Baidu Netcom Science Technology Co., Ltd", CN = baidu.comi:C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256v:NotBefore: Jul 8 01:41:02 2024 GMT; NotAfter: Aug 9 01:41:01 2025 GMT1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign RSA OV SSL CA 2018i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSigna:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256v:NotBefore: Nov 21 00:00:00 2018 GMT; NotAfter: Nov 21 00:00:00 2028 GMT2 s:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSigni:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CAa:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256v: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.2Cipher : ECDHE-RSA-AES128-GCM-SHA256Session-ID: 6A43A459770A4FC6918EA7BFF3004ECFB94F6960911314356A048A2AF074998BSession-ID-ctx: Master-Key: 2370DEA3AACC0D869E337B8B99C80C44A190B31AB9F2DEE58CD16F0CE1EA8AC0E23CB0063A0587099EF2F5F557417EC8PSK identity: NonePSK identity hint: NoneSRP username: NoneTLS 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.M0070 - 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: 1740298678Timeout : 7200 (sec)Verify return code: 20 (unable to get local issuer certificate)Extended master secret: no
---HTTP/1.1 400 Bad Requestclosed
-
命令成功连接到目标服务器(
CONNECTED(00000003)),说明目标端口(443)是开放的。使用 Python 脚本,socket连接
如果服务器上安装了Python,你可以编写一个简单的Python脚本来测试端口连接。以下是一个Python3的例子:
import socketdef 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 Trueelse:print(f"端口 {port} 可能被关闭或无法访问")return Falseexcept Exception as e:# 捕获异常并打印错误信息print(f"发生错误: {e}")return False# 示例调用 if __name__ == "__main__":target_ip = '139.xxx.xxx.235'target_port = 22is_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端口是否开放的。我们可以将它分解为几个部分来详细解释其功能和原理:
命令分解
-
timeout 5
timeout是 Linux 系统中的一个命令,用于限制后续命令的执行时间。- 在这里,
timeout 5表示后续命令最多运行 5 秒钟,如果超过这个时间,就会被强制终止。
-
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输出为空)。
-
&& echo “端口6443是开放的”
&&是逻辑“与”操作符。只有当前面的命令成功执行时(即返回状态码为 0),后面的命令才会被执行。- 如果连接成功,则输出
"端口6443是开放的"。
-
|| echo “端口6443可能被关闭或无法访问”
||是逻辑“或”操作符。如果前面的命令失败(返回状态码非 0),则执行后面的命令。- 如果连接失败,则输出
"端口6443可能被关闭或无法访问"。
原理解析
-
TCP 连接机制
当使用/dev/tcp/<host>/<port>时,Bash 会尝试与指定的主机和端口建立一个 TCP 连接。如果目标端口开放且网络可达,连接会成功;否则,连接会失败或超时。 -
超时机制
使用timeout命令是为了避免在网络不可达或目标端口响应缓慢的情况下,命令长时间挂起。设置超时时间为 5 秒可以有效控制等待时间。 -
状态码判断
Bash 命令执行后会返回一个状态码:- 状态码为 0 表示命令成功执行。
- 状态码非 0 表示命令执行失败。
根据状态码的不同,选择性地执行不同的输出。
注意事项
-
Bash 版本要求
/dev/tcp/<host>/<port>是 Bash 内置的功能,因此需要确保使用的 Shell 是 Bash,并且版本支持该功能。
-
权限问题
- 某些情况下,可能需要足够的权限才能发起网络连接。如果命令失败,可以检查当前用户的权限。
-
防火墙或网络限制
- 即使目标端口本身是开放的,也可能因为防火墙、路由器规则或其他网络配置导致连接失败。
这条命令的核心功能是通过 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.13Starting 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 unknownNmap done: 1 IP address (1 host up) scanned in 0.55 seconds
nmap -p 443 www.zhiexa.comStarting 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 httpsNmap done: 1 IP address (1 host up) scanned in 0.56 seconds
总结
本文简单总结常用的测试端口的命令, 方便以后忘记了来看看,做个记录,最常用的 nc telnet 其次我喜欢用 curl
如果你喜欢欢迎点赞或关注!
相关文章:
检测服务端口是否开放的常用方法
检测服务端口是否开放的常用方法 文章目录 检测服务端口是否开放的常用方法背景使用nc命令使用 telnet 命令使用 curl 命令使用 openssl 命令使用 Python 脚本,socket连接使用 bash 内建命令:使用 nmap:总结 背景 有时候需要测试网络是否连通,端口是否开放…...
23贪心算法
分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…...
网站快速收录:如何优化网站404页面?
优化网站404页面是提升用户体验和SEO效果的重要一环。以下是一些优化404页面的建议: 一、设计友好的404页面 简洁明了的提示信息:使用清晰的语言告诉用户该页面不存在或已被删除,避免使用过于技术化的术语。 提供导航链接:在40…...
DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步
DevEco Studio快捷键 DevEco Studio是华为推出的用于开发HarmonyOS应用的集成开发环境,它提供了丰富的快捷键以提高开发效率,以下为你详细介绍不同操作场景下的常用快捷键: 通用操作快捷键 操作描述Windows/Linux 快捷键Mac 快捷键打开设置窗…...
Ubuntu服务器 /data 盘需要手动挂载的解决方案
服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后,发现 /data 盘 没有自动挂载,通常是因为: /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别,需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...
[Windows] 全国油价实时查询,可具体到城市
[Windows] 全国油价实时查询,可具体到城市 链接:https://pan.xunlei.com/s/VOJnS3aOPeBwGaSvS0O0E1hwA1?pwdx83j# 出于代码练习的目的,调用公共免费api做的py程序,已经一键打包,双击启动即可 使用:选择…...
香橙派/树莓派 利用Wiring库 使用GPIO模拟PWM
香橙派或者树莓派 等开发板,本身带有硬件PWM,比如香橙派3 lts版,但是这个引脚不符合我的项目需求,我需要外接一个电机,在检测到人脸的时候 转动,但是这个硬件引脚,只要上电就开始输出pwm 信号,导…...
【CSS】---- CSS 变量,实现样式和动画函数复用
1. 前言 本文介绍 CSS 的自定义属性(变量)来实现样式、动画等 CSS 的复用。都是知道在 CSS 和 JS 复用一个很重要的事情,比如 JS 的函数封装,各个设计模式的使用等等,CSS 中样式的复用,同样重要。MDN 使用 CSS 自定义属性(变量):自定义属性(有时候也被称作CSS 变量或…...
C#实现Modbus TCP 通讯测试软件
C#实现Modbus TCP 通讯测试软件,源码,包括读写功能。 文件列表 WindowsFormsApplication6/WindowsFormsApplication6.sln , 1041 WindowsFormsApplication6/WindowsFormsApplication6.v12.suo , 39936 WindowsFormsApplication6/WindowsFormsApplicati…...
装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住
文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…...
Windows逆向工程入门之串流操作指令解析与拓展
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 1. 串流操作指令简介 2. 串流指令及其操作解析 2.1 DF(方向标志) 设置和清除 2.2 STOS(存储串操作) 指令格式 操作过程 应用场景 …...
【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》
论文链接 1. 背景与动机 语言空间与推理的矛盾 目前大多数大语言模型(LLMs)在解决复杂问题时采用链式思维(Chain-of-Thought, CoT)方法,即利用自然语言逐步推导出答案。然而,论文指出: 自然语言…...
topN 相似度 torch实现
目录 优化版,去重相似度 topN 欧式距离版 没有去重复, 优化版,去重相似度 import torch import torch.nn.functional as F torch.manual_seed(42) # 假设 10 条数据,每条数据的特征维度是 128 data = torch.randn(10, 128)# 计算所有数据对之间的余弦相似度 cosine_simi…...
深度剖析 C 语言函数递归:原理、应用与优化
在 C 语言的函数世界里,递归是一个独特且强大的概念。它不仅仅是函数调用自身这么简单,背后还蕴含着丰富的思想和广泛的应用。今天,让我们跟随这份课件,深入探索函数递归的奥秘。 一、递归基础:概念与思想 递归是一种…...
goredis常见基础命令
基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…...
【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组?2.2 什么是会话? 3、应用层协议HTTP3.1 HTTP协议3.2 HT…...
JavaScript函数-arguments的使用
在JavaScript编程语言中,函数是构建复杂逻辑和实现代码复用的关键组件。虽然现代JavaScript(尤其是ES6及之后版本)提供了更多灵活的方式来处理函数参数(如剩余参数、默认参数等),但arguments对象仍然是一个…...
Hadoop常用操作命令
在NameNode节点格式化集群 初始化集群 hdfs namenode -format启动HDFS sbin/start-dfs.sh启动yarn sbin/start-yarn.sh启动NodeManager yarn-daemon.sh start nodemanager启动DataNode hadoop-daemon.sh start datanode启动SecondaryNameNode hadoop-daemon.sh start se…...
system verilog的流操作符
流操作符,有分为操作对象是一整个数组和单独的数据两种,例如bit [7:0] a[4]和bit [31:0] b,前者操作对象是数组,后者是单独一个较大位宽的数。 流操作符有<<和>>,代表从右向左打包和从左向右打包。 打包的…...
LLM2CLIP论文学习笔记:强大的语言模型解锁更丰富的视觉表征
1. 写在前面 今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS R ICHER V ISUAL R EPRESENTATION》, 2024年9月微软和同济大学的一篇paper, 是多模态领域的一篇工作,主要探索了如何将大模型融合到Clip模型里面来进一步提…...
计算机毕业设计SpringBoot+Vue.jst网上超市系统(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
python-静态方法和类方法
Java之类的编程语言还带有静态方法,Python类也拥有与静态方法明确对应的方法。此外,Python还拥有类方法,要比静态方法更高级一些。 静态方法与Java一样,即便没有创建类的实例,静态方法也是可以调用的,当然…...
什么是手机9008模式?如何进入9008
之前给大家分享了一些有关手机刷机的知识,今天给大家讲一讲如果刷机过程中不慎变砖应该如何应对(当然了,希望大家都不会遇到)😂😄 在给手机 Root 或刷机时,线刷 9008 指的是利用 高通 9008 模式…...
嵌入式之指针
在嵌入式系统中指针是一种非常重要的概念。它们用于直接访问内存地址,能够提高程序的灵活性和效率。 一、基本概念 1. 指针的基本概念 定义:指针是一个变量,其值为另一个变量的地址。通过指针,可以间接访问和修改该变量的值。声…...
网络安全研究
1.1 网络安全面临的威胁 网络安全面临的威胁呈现出多样化和复杂化的趋势,给个人、企业和国家的安全带来了严峻挑战。以下是当前网络安全面临的主要威胁: 1.1.1 数据泄露风险 数据泄露是当前网络安全的重大威胁之一。根据国家互联网应急中心发布的《20…...
Git入门:数据模型 to 底层原理
版本控制系统(VCS)是软件开发中不可或缺的工具,而Git作为现代版本控制的事实标准,其底层设计远比表面命令更加优雅。本文将从数据模型的角度,揭示Git的核心工作原理。 Git的核心概念 1. 快照(Snapshot&am…...
openharmony中hdf框架的驱动消息机制的实现原理
openharmony中hdf框架的驱动消息机制的实现原理 在分析hdf框架时发现绕来绕去的,整体梳理画了一遍流程图,发现还是有点模糊甚至不清楚如何使用的,详细的每个点都去剖析细节又过于消耗时间,所以有时间便从功能应用的角度一块块的去…...
HTTP SSE 实现
参考: SSE协议 SSE技术详解:使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为:服务端和客户端建立连接之后双方均保持连接,但仅支持服务端向客户端推送数据。推送完毕之后关闭连接,无状态行。 下面是基于…...
二分图检测算法以及最大匹配算法(C++)
上一节我们学习了有向图中的最大连通分量. 本节我们来学习二分图. 二分图是一种特殊的图结构, 能够帮助我们高效地解决这些匹配和分配问题. 本文将带你了解二分图的基本概念, 判定方法, 最大匹配算法以及实际应用场景. 环境要求 本文所用样例在Windows 11以及Ubuntu 24.04上面…...
Keepalive基础
一。简介和功能 vrrp协议的软件实现,原生设计目的是为了高可用ipvs服务 功能: 1.基于vrrp协议完成地址流动 2.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 3.为ipvs集群的各RS做健康状况检测 4.基于脚本调用接口…...
