前缀、文档修改记录
20240311 初始化编辑此文章,完稿
20240311 在录制视频后,修正部分内容及描述
章节1、需求描述
业务侧,经常需要检测业务地址,业务端口是否能通,这样的需求,就需要配套的工具来排查。
章节2、检查主机是否存活
常规来说,检测一个业务,是否可达,先检测其云主机ECS是否存活,处于开机状态。一般基于ping其IP地址的路由是否可通的方式来判断。一般来说,优先使用ICMP的ping 方式进行检测排查问题
ping xxx.xxx.xxx.xxx # 其中xxx.xxx.xxx.xxx为一个有效IP地址
如果IP地址不通,可能为网络真实不通,或可能存在对端防火墙屏蔽ICMP的包
亦可通过mtr / tracert / traceroute 相关命令,测试路由点,是否为中间某个路由点有误。
章节3、检查端口是否可通
一般来说,如果上一个章节的云主机IP地址都不通,优先检查主机故障/防火墙规则/IP地址的路由问题。或者,如果路由正确且明确知道是对端已关闭ICMP包响应,则可进行TCP/UDP端口检查。
本次推荐使用netcat/nc命令,进行端口TCP/UDP是否可达的检查。
3.1、安装netcat
Debian/Ubuntu 安装netcat/nc的命令,且推荐优先安装的版本为 netcat-openbsd,而非netcat-traditional
// OS: Debian 12
root@server:~# apt update
root@server:~# apt-get install netcat-openbsd
root@server:~#
3.2、netcat参数释义
root@server:~# nc -h
OpenBSD netcat (Debian patchlevel 1.206-1ubuntu1)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
[-m minttl] [-O length] [-P proxy_username] [-p source_port]
[-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
[-X proxy_protocol] [-x proxy_address[:port]] [destination]
参数清单:
-4 Use IPv4/仅使用IPv4
-6 Use IPv6/仅使用IPv6
-b Allow broadcast/允许广播
-C Send CRLF as line-ending
-D Enable the debug socket option/启用对套接字的调试
-d Detach from stdin/不尝试从stdin进行读取
-F Pass socket fd
-h This help text/帮助文档
-I length TCP receive buffer length
-i interval Delay interval for lines sent, ports scanned/指定发送和接收的文本行之间的延迟时间interval
-k Keep inbound sockets open for multiple connects/nc在接收完一个请求后不会立即退出,而是会继续监听其他请求
-l Listen mode, for inbound connects/监听模式
-M ttl Outgoing TTL / Hop Limit
-m minttl Minimum incoming TTL / Hop Limit
-N Shutdown the network socket after EOF on stdin
-n Suppress name/port resolutions/不使用域名
-O length TCP send buffer length
-P proxyuser Username for proxy authentication
-p port Specify local port for remote connects/为远程连接定义的本地端口号
-q secs quit after EOF on stdin and delay of secs
-r Randomize remote ports
-S Enable the TCP MD5 signature option
-s source Local source address/指定用于发送数据包的接口的IP地址
-T keyword TOS value
-t Answer TELNET negotiation
-U Use UNIX domain socket
-u UDP mode/使用UDP,而不是缺省选项TCP
-V rtable Specify alternate routing table
-v Verbose/指定详细输出
-W recvlimit Terminate after receiving a number of packets
-w timeout Timeout for connects and final net reads/如果连接和stdin空闲超过了timeout秒,则无提示地关闭连接
-X proto Proxy protocol: "4", "5" (SOCKS) or "connect"/与代理服务器通信时,使用该指定协议。受支持的协议为4(SOCKSv4)、5(SOCKSv5)和connect(HTTP代理)。如果未指定协议,则使用SOCKSv5
-x addr[:port] Specify proxy address and port/使用proxy_address和port上的代理请求到addr的连接。如果未指定port,则使用代理协议的已知端口(SOCKS为1080,HTTP为3128)
-Z DCCP mode
-z Zero-I/O mode [used for scanning]/执行端口扫描。对于TCP端口(缺省),尝试在不发送数据的情况下执行连接扫描(完整三路信号握手)。对于UDP(–u),缺省情况下会发送空UDP包
Port numbers can be individual or ranges: lo-hi [inclusive]
root@server:~#
3.3、用netcat检测TCP端口
nc -nvz 93.150.241.210 8000-9999
3.4、用netcat检测UDP端口
nc -nvzu 93.150.241.210 123
端口如果是通的,会类似如下的显示
root@debian12:~# nc -nvz 10.11.11.200 22
Connection to 10.11.11.200 22 port [tcp/*] succeeded!
root@debian12:~#
3.5、用netcat临时启动一个服务端TCP/UDP监听
如果是为了验证端口,需要自己在服务器上临时启动一个监听,也可以使用netcat临时启动一个服务端的TCP/UDP端口监听。
nc -n -l -k -u 123 # 监听UDP/123
nc -l -k 3389 # 监听TCP/3389
-l 代表netcat 将以监听模式运行;
-k 表示netcat 在接收完一个请求后不会立即退出,而是会继续监听其他请求
-u 使用UDP,而不是缺省选项TCP
附录1、视频操作演示
附录2、@Dasmz
博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。
对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费
Twitter: Dasmz
Youtube: @DasmzStudio
Telegram: @Dasmz