标签归档:netcat

基于netcat/nc命令,检测地址端口是否通 2024-03-11

前缀、文档修改记录

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

Donate
云乞讨