[工具] Shell 批量检测服务器 TCP 端口的联通状态 (telnet 版)

介绍

基本信息

作者:朱明宇
名称:批量检测服务器 TCP 端口的联通状态
作用:批量检测服务器 TCP 端口的联通状态,并将此服务器无法联通的端口存储到 $checklist 文件里

使用方法

1. 将此脚本和端口清单 $portlist 文件放在同一目录下
2. 端口清单 $portlist 每一个端口占用一行,格式为:<IP address corresponding to the port number to be connected>:<port number to connect>:<port functions>,并和此脚本放在同一目录下
3. 在此脚本的分割线内写入相应的内容
4. 给此脚本添加执行权限
5. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <script> <server IP address 1> <server IP address 2> ……

脚本分割线里的变量

1. portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件
2. checklist=tcp_ports_checklist.txt #存放测试结果的文件

注意

1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 此脚本会清空 $checklist
3. 执行此脚本前确保 telnet 命令已经安装
4. 执行此脚本可能有些慢

脚本

#!/bin/bash

####################### Separator ########################

portlist=tcp_ports.txt
checklist=tcp_ports_checklist.txt

####################### Separator ########################

echo  > $checklist
maxnum=`cat $portlist | wc -l`

for hosts in $*
do

        echo $hosts >> $checklist

        for i in `seq 1 $maxnum`
        do

                ips=`sed -n $[i]p $portlist | awk -F':' '{print $1}'`
                ports=`sed -n $[i]p $portlist | awk -F':' '{print $2}'`
                remarks=`sed -n $[i]p $portlist | awk -F':' '{print $3}'`

                ssh $hosts "(sleep 1;) | telnet $ips $ports 2>&1" | grep 'timed out' >> $checklist

                if [ $? == 0 ];then
                        echo "`sed -n $[i]p $portlist`" >> $checklist
                        echo >> $checklist
                fi

        done

        echo >> $checklist

done

[排错] 解决 openSUSE & SLES 通过 YaST 设置 IP 地址时报错 “Network is currently handled by NetworkManager”

报错代码

Network is currently handled by NetworkManager

解决方法

步骤一:报错现象和原因分析

1.1 报错现象

通过 yast 给 openSUSE 和 SUSE 设置 IP 地址时可能会出现以下报错

(图:1)

1.2 原因分析

如果是带桌面安装 openSUSE 和 SLES ,系统则会默认使用 NetworkManager 管理网络,这样会导致 yast 无法设置 IP 地址

步骤二:排错

2.1 取消开机自启 NetworkManager

# systemctl disable NetworkManager

2.2 停止 NetworkManager 服务

# systemctl stop NetworkManager

2.3 在 yast 中将 General Network Settings 从 NetworkManager Service 换成 Wicked Service

2.3.1 进入 yast
# yast
2.3.2 进入 System 下面的 Network Settings
2.3.3 在 Global Options 选项中将 General Network Settings 从 NetworkManager Service 换成 Wicked Service
(图:2)

[内容] Linux 网络代理的设置 (全局模式)

内容一:Linux 代理环境变量的种类

1) http_proxy
2) https_proxy
3) ftp_proxy
4) socket_proxy
5) all_proxy
6) no_proxy


补充:
1) 变量可以使用通配符
2) 添加多个变量时可以使用 “,” 号分割
3) 不填种类默认以 http 协议传输

内容二:环境变量的格式

2.1 没有用户和密码的格式

export <environment variable>=http://<IP address>:<port>

2.2 有用户和密码的格式

export <environment variable>=https://<user>:<password>@<IP address>:<port>

(注意:如果密码中也有一个 “@” 符号,则需要把 “@” 符号转义一下,转义成 %40)

内容三;可以设置代理变量的文件

1) /etc/profile
2) ~/.bashrc
3) /etc/profile.d/<文件名前缀>.sh

内容四:控制设置的代理

4.1 开启设置的代理

4.1.1 方法一
# reboot
4.1.2 方法二
# source /etc/profile

4.2 显示目前生效的代理

4.2.1 显示 http_proxy 代理
# echo $http_proxy

或者:

# env | grep http_proxy
4.2.2 显示 https_proxy 代理
# echo $https_proxy

或者:

# env | grep https_proxy
4.2.3 显示 ftp_proxy 代理
# echo $ftp_proxy

或者:

# env | grep ftp_proxy
4.2.4 显示 socket_proxy 代理
# echo $socket_proxy

或者:

# env | grep socket_proxy
4.2.5 显示 no_proxy 代理
# echo $no_proxy

或者:

# env | grep no_proxy
4.2.6 显示 all_proxy 代理
# echo $all_proxy

或者:

# env | grep proxy

4.3 取消目前生效的代理

4.3.1 取消 http_proxy 代理
# unset http_proxy
4.3.2 取消 https_proxy 代理
# unset https_proxy
4.3.3 取消 ftp_proxy 代理
# unset ftp_proxy
4.3.4 取消 socket_proxy 代理
# unset socket_proxy
4.3.5 取消 no_proxy 代理
# unset no_proxy
4.3.6 取消 all_proxy 代理
# unset all_proxy

内容五:设置网络代理的案例

5.1 案例一:临时设置网络代理

# export http_proxy=http://8.8.8.8:80

(补充:这里以设置 http 的网络代理,代理不使用无密码,且 IP 和端口为 8.8.8.8:8080 为例)

或者:

# setenv http_proxy=http://8.8.8.8:80

(补充:这里以设置 http 的网络代理,代理不使用无密码,且 IP 和端口为 8.8.8.8:8080 为例)

5.2 案例二:永久设置网络代理

5.2.1 如果是 Rocky Linux & RHEL & openSUSE & SLES
5.2.1.1 修改 /etc/profile 配置文件
# vim /etc/profile

添加以下内容:

……
export http_proxy=http://8.8.8.8:80
export https_proxy=http://admin:123@8.8.8.8:8080
export no_proxy=”localhost, 127.0.0.1, ::1″


补充:这里以设置
1) 这里以设置 http 的网络代理,代理不使用无密码,且 IP 和端口为 8.8.8.8:8080
2) 这里以设置 https 的网络代理,代理使用密码,用户是 admin 密码是 123 ,且 IP 和端口为 8.8.8.8:8080 为例
3) 网络代理不影响 localhost、127.0.0.1 和 ::1
为例

(注意:如果密码中也有一个 “@” 符号,则需要把 “@” 符号转义一下,转义成 %40)

5.2.1.2 让修改的配置文件生效
# source /etc/profile

或者退出后重新登录:

(步骤略)

5.2.1.3 显示目前生效的代理
# echo $http_proxy ; echo $https_proxy
5.2.2 如果是 openSUSE & SLES
5.2.2.1 修改 /etc/sysconfig/proxy 配置文件
# vim /etc/sysconfig/proxy

将部分内容修改如下:

......
PROXY_ENABLED="yes"
......
HTTP_PROXY="http://8.8.8.8:80"
......
HTTPS_PROXY="http://admin:123@8.8.8.8:8080"
......
NO_PROXY="localhost, 127.0.0.1, ::1"
......


补充:这里以设置
1) 开启网络代理
2) 这里以设置 http 的网络代理,网络代理不使用密码,且 IP 和端口为 8.8.8.8:8080
3) 这里以设置 https 的网络代理,网络代理使用密码,用户是 admin 密码是 123 ,且 IP 和端口为 8.8.8.8:8080 为例
4) 网络代理不影响 localhost、127.0.0.1 和 ::1
为例

5.2.2.2 让修改的配置文件生效

退出登录后重新登录:

(步骤略)

5.2.2.3 显示目前生效的代理
# echo $http_proxy ; echo $https_proxy

参考文献:

https://access.redhat.com/solutions/1351253