linux下利用nc监听端口的玩法
家里有一些小服务器玩具,由于家里网络都是dhcp获取ip地址,ip地址可能会出现变动。那么如果在服务器上监听一个特殊端口,通过内网扫描指定的特殊端口,即可获取到服务器的ip地址。
一、初窥门径
在服务器上开机启动一个脚本,通过nc监听一个特殊端口,并且保证是常驻监听
nc -lk 8888
参数解释: -l:让 nc 进入监听模式。 -k:在处理完一个连接后继续保持监听状态,不退出。 8888:指定监听的端口号。
二、渐入佳境
不仅监听端口,还可以通过http访问输出主机名和主机时间,具体信息可以根据自己实际情况添加。
while true; do echo -e "HTTP/1.1 200 OK\n\n $(date +'%Y/%m/%d %H:%M:%S') $(hostname)" | nc -l 8888 -q 1; done
脚本解释: 1、while true; do ... ; done:无限循环,确保代码一直运行,不断接受新的连接。 2、echo -e "HTTP/1.1 200 OK\n\n $(date +'%Y/%m/%d %H:%M:%S') $(hostname)": HTTP/1.1 200 OK:HTTP状态行,表示请求成功。 \n\n:两个换行符,分隔HTTP头和主体。 $(date +'%Y/%m/%d %H:%M:%S'):当前日期和时间。 $(hostname):当前主机名。 echo -e:启用解释反斜杠转义字符(例如 \n 代表换行)。 "HTTP/1.1 200 OK\n\n $(date +'%Y/%m/%d %H:%M:%S') $(hostname)":输出的HTTP响应内容,包括状态行和主体。 3、| nc -l -p 8888: |:管道操作符,将前面命令的输出作为后面命令的输入。 nc(netcat):网络工具,用于读写网络连接。 -l:让 nc 进入监听模式。 -p 8888:指定监听的端口号8888。
三、融会贯通
以下操作均在 /data 目录下
mkdir /data cd /data
1、创建获取主机信息和输出内容的脚本 myHostInfo.sh
vim myHostInfo.sh
写入以下内容,并给定执行权限
#!/bin/bash # 输出当前日期和时间 current_date=$(date +'%Y/%m/%d %H:%M:%S') # 输出主机名 hostname=$(hostname) # 其他你需要的信息,比如CPU使用率 cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}') # 输出结果 echo -e "HTTP/1.1 200 OK\n\nDate: $current_date\nHostname: $hostname\nCPU Usage: $cpu_usage"
给定执行权限
chmod +x myHostInfo.sh
2、创建监听脚本 myNCServer.sh
vim myNCServer.sh
写入以下内容
#!/bin/bash while true; do /data/myHostInfo.sh | nc -l -p 8888 -q 1; done
给定执行权限
chmod +x myNCServer.sh
3、运行myNCServer.sh
./myNCServer.sh
4、加入开机启动
echo "$(pwd)/myNCServer.sh" >> /etc/rc.local
附:一个能获取更多信息的脚本
#!/bin/bash # 获取当前日期和时间 current_date=$(date +'%Y/%m/%d %H:%M:%S') # 获取主机名 hostname=$(hostname) # 获取CPU核心数 cpu_cores=$(nproc) # 获取CPU使用率 cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8"%"}') # 获取总内存和内存使用率 mem_total=$(free -g | awk '/^Mem:/{print $2}') mem_used=$(free | awk '/^Mem:/{printf("%.2f", $3/$2 * 100.0)}') # 获取硬盘容量和使用率 disk_total=$(df -h --total | awk '/^total/{print $2}') disk_used=$(df -h --total | awk '/^total/{print $5}') # 获取已开机时间 uptime_info=$(uptime -p) # 输出结果 echo -e "HTTP/1.1 200 OK\n\n\ Date: $current_date\n\ Hostname: $hostname\n\ CPU Cores: $cpu_cores\n\ CPU Usage: $cpu_usage\n\ Memory Total (GB): $mem_total\n\ Memory Usage: $mem_used%\n\ Disk Total: $disk_total\n\ Disk Usage: $disk_used\n\ Uptime: $uptime_info"