linux下利用nc监听端口的玩法

admin6个月前实践出真知569


ubuntu/debian开机启动设置,移步这里



家里有一些小服务器玩具,由于家里网络都是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"


返回列表

上一篇:记录一次docker安装mysql8.3

没有最新的文章了...

相关文章

记一次博客的迁移(Ubuntu安装docker部署博客)

一、docker的安装更新源#apt-get update安装依赖#apt-get install \     apt-tran...

docker部署minio

docker部署minio

docker安装方式 移步 https://note.centos7.online/?id=27一、拉取镜像docker pull minio/minio二、启动容器do...

记录一次docker安装mysql8.3

配置文件 /data/mysql8-data/conf/my.cnf[mysql] # 设置mysql控制台默认字符集 default-character-set=utf8mb4 #&...

安卓调用webview中iframe定义方法(适用于数据回调给webview)

首先在html中用js获取到当前页面的层级//递归获取当前嵌套在iframe页面的层级位置     function getSelfWindowPa...

关于时间的处理(时间范围生成,mysql按照天,周,月统计)

mysql的查询语句 #周  select FROM_UNIXTIME(create_time,'%Y%u') weeks,count(cas...

PHP造一个$_PUT

$_PUT = array(); if ('PUT' == $_SERVER['REQUEST_METHOD'])&...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。