nc命令简介
nc命令的安装
要有外网yum源
nc命令语法格式
nc命令常用参数
-l | 使用监听模式,管控传入的资料 |
-p | 设置本地主机使用的通信端口 |
-s | 设置本地主机送出数据包的IP地址 |
-u | 使用UDP传输协议 |
-v | 显示指令执行过程 |
-w | 设置等待连线的时间 |
-z | 使用0输入/输出模式,只在扫描通信端口时使用 |
-n | 不使用dns反向查询ip地址域名 |
参考实例(❀为重点解析)
扫描指定主机的8080端口(默认TCP):
#扫描指定目标ip和端口
nc -nvv 172.16.11.210 8080
#扫描本地8080端口
nc -nvv 127.0.0.1 8080
#扫描指定目标IP和端口且输出详细信息
nc -v -z -w2 172.16.11.210 8080
❀扫描指定主机的1-100端口,指定为UDP协议,扫描等待连线时间为2秒:
❀扫描指定主机的8088端口,并显示执行过程,扫描等待连线时间为2秒:
这是不成功的输出
这是成功输出
扫描指定主机的80-85端口,并显示执行过程,扫描等待连线时间为2秒:
扫描指定主机的1到65535的端口范围,只输出打开的端口(去掉-v参数即可)
❀批量检测服务器指定端口开放情况:
1、假如我们要监控一堆指定的IP和端口,可新建一个文件(第1列服务器IP,第2列要监控的端口)。
要注意:写ip和端口的文件中不能有注释不能有空行,只能是ip 端口;如果后面跟注释,会是失败,空行也会读取为失败
ip可自行写要监控的ip地址端口同意。
[root@localhost ncport]# cat ip-ports.txt
172.16.11.210 80
172.16.11.210 6379
172.16.11.210 18000
172.16.11.211 3306
172.16.11.212 10001
172.16.11.209 8099
172.16.11.210 8088
2、使用脚本监测判断服务端口是否开放,成功会返回0值显示ok,失败会返回1值显示fail。
借用上面一步的文件,文件内容是自己要监控的ip地址端口。
[root@localhost ncport]# cat nc-ports.sh
#/bin/bash
# 获取执行当前脚本的路径
DIR=$(cd $(dirname $0) && pwd )
cat $DIR/ip-ports.txt | while read line;do
nc -w 10 -z $line > /dev/null 2>&1
if [ $? -eq 0 ];then
echo $line:ok
else
echo $line:fail
fi
done
3、执行脚本查看运行结果如下:
[root@localhost ncport]# sh nc-ports.sh
172.16.11.210 80:fail
172.16.11.210 6379:fail
172.16.11.210 18000:fail
172.16.11.211 3306:fail
172.16.11.212 10001:fail
172.16.11.209 8099:fail
172.16.11.210 8088:ok
当端口不通时设置告警
Linux邮件告警
更改完脚本为:
[root@localhost ncport]# cat nc-ports.sh
#/bin/bash
mail_ALL=(zhangsan@qq.com,lisi@qq.com,wangwu@qq.com)
# 获取执行当前脚本的路径
DIR=$(cd $(dirname $0) && pwd )
cat $DIR/ip-ports.txt | while read line;do
nc -w 10 -z $line > /dev/null 2>&1
if [ $? -eq 0 ];then
echo $line:ok
else
echo $line:fail
echo "服务器 $line 端口不通,请尽快处理!" | mail -s "【机房监控】服务器$line端口不通" $mail_ALL
fi
done
需要定时监控的话可以添加周期性计划任务,定时执行一下监测脚本,如果有fail就会告警发邮件;
zabbix告警
判断脚本如下:
[root@localhost ncport]# cat 111.sh
#使用哪个端口写哪个,一个脚本只能用于监测一个端口,如果监测的ip端口是ok,则返回1,如果不是ok或者是没有,则返回0。
port=$(sh /etc/zabbix/zabbix_agentd.d/ncports/nc-ports.sh | grep "172.16.10.111 2222" | awk -F ":" '{print $2}')
#echo $port
if [ '$port' == "ok" ];then
echo "1"
else
echo "0"
fi
windows弹窗告警
(1) 先打开接收消息弹窗windows客户机的“Messenger”服务,设置为“启动”
(2) 利用smbclient命令来发送消息,net脚本文件如下:
[root@localhost ncport]# cat /scripts/net.sh
#/scripts/net.sh
case "$1" in
send)
echo "$3"|smbclient -I "$2" -M `nmblookup -A "$2"|sed -e '1d' -e '3,/*/d'|cut -f2|cut -d' ' -f1`
;;
*)
echo "Usage:net send
linux邮件告警及zabbix告警的优缺点
nc命令文件拷贝
很多时候我们都要在两个不同的终端间拷贝文件,虽然说有很多种方法,例如:FTP、Samba、Scp等等,但我们仅仅需要一次临时的快捷的连接,不仅要安装软件,还要进行登录操作,如果这样的话那么大部分的时间都会被浪费掉。
假设我们需要传输一个文件bashtest.txt
,通过主机A发送到主机B。
发送端(A):
通过nc的-l参数将主机A变为服务器,并重定向netcat的输入为文件bashtest.txt
,也就是我们想要传输的文件,那么当任何主机成功连接到该端口,netcat就会发送bashtest.txt
的文件内容。
接收端(B):
nc -l 172.16.11.210 10000 > test.txt
使用nc命令连接主机A的10000端口,并将输出重定向到test.txt。这样,当主机B连接到主机A时,就会接收到A发来的文件内容,并保存的文件test.txt
反之也是如此,只不过将主机A与主机B的身份进行调换。顺带着,输入与输出重定向也要发生改变。
(接收端)A: nc -l 10000 > test.txt
(发送端)B: nc -n 192.168.78.128 10000 test.txt
nc命令目录传输
使用nc传输目录实际上和传输文件手法一样,只不过将目录打包为压缩文件,再使用nc将压缩文件传输过去,客户端接收后将接收到的压缩文件解压。
传输目录为test,其下有文件test.txt、test2.txt
由主机A传输到主机B
发送方(A):
tar -zcvf - test | nc -l 10000
-z 使用gzip指令处理压缩文件
-c 创建新的压缩文件
-v 显示指令执行过程,即详细模式
-f 指定需要压缩的文件,即test文件夹
接收方(B):
nc 192.168.78.128 10000 | tar -zxvf -
- 代表linux中的标准输出流,将压缩后的文件直接输出到netcat中
发送端接收到通过netcat传输来的文件,再使用tar指令解压文件
nc命令在线聊天
通过netcat实现在线聊天室也需要C/S结构,服务端监听本地端口,客户端直接连接到远程服务器端口。
服务端:
nc -l -p 10000
客户端:
-l 监听模式
-p 指定本地端口,在实际应用中可以省略
版权声明:本文内容来自CSDN:A-刘晨阳,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
原文链接:https://blog.csdn.net/liu_chen_yang/article/details/129255119
如有涉及到侵权,请联系,将立即予以删除处理。
在此特别鸣谢原作者的创作。