Linux 셸 자동화 검 측 네트워크 와 포트 연결 상황

3581 단어 Linux
배경: 우리 의 특정한 기관실 교환 기 는 교체 가 필요 합 니 다. 교체 가 완 료 된 후에 우 리 는 호스트 와 서비스의 연결 성 을 검증 해 야 합 니 다.예전 에 어떤 호스트 만 측정 할 때 네트워크 를 측정 하면 ping 하고 포트 를 측정 하면 telnet 입 니 다.지금 은 기계 가 많아 져 서 한 명 씩 명령 을 내 리 는 것 은 너무 번거롭다.유 니 버 설 스 크 립 트 를 쓰 는 데 시간 이 좀 걸 렸 습 니 다. 이제 공유 하 겠 습 니 다.
스 크 립 트 를 공유 하기 전에 스 크 립 트 의 핵심 원리 와 방법 을 보급 합 니 다.
테스트 네트워크
테스트 네트워크, 우 리 는 모두 ping 을 사용 하지만 Liux 의 기본 상황 에서 ping 은 계속 진행 되 기 때문에 ping 명령 의 인자 (ping - h) 를 찾 아 보면 - c 매개 변수 로 ping 의 횟수 를 지정 할 수 있 습 니 다.또한 ping 명령 을 실행 한 후 $를 실행 합 니까?값 0 (성공) 을 되 돌려 줍 니 다. ping 에 이상 이 있 을 때 $를 계속 실행 하 시 겠 습 니까?값 > 0 (이상) 을 되 돌려 줍 니 다.간단 한 코드 는 다음 과 같 습 니 다.
HOST=8.8.8.8
ping -c 4 "$HOST"  ##    4 ,  windows   
echo $?

테스트 포트
테스트 포트, 우 리 는 일반적으로 telnet 을 사용 하지만, telnet 은 횟수 나 시간 이 긴 인자 가 없 는 것 같 습 니 다.여기 서 사용 하 는 nc 명령 으로 테스트 합 니 다.nc 에 - t 매개 변 수 는 시간 초과 설정 이 가능 합 니 다. - z 매개 변 수 는 스 캔 테스트 에 만 사 용 됩 니 다. (원래 서비스 에 영향 을 주지 않 는 다 고 이해 합 니 다) nc 명령 을 실행 한 후에 도 $를 사용 합 니까?결과 에 이상 이 있 는 지 확인 하 러 왔 습 니 다.간단 한 코드 는 다음 과 같 습 니 다.
HOST=8.8.8.8
PORT=8080
nc -w 10 -z $HOST $PORT ##-w      10 
echo $?

자동화 다 중 IP, 다 중 포트 테스트 스 크 립 트
자, 확대 모집 합 니 다 ~ ~ 스 크 립 트 주석 은 바로 스 크 립 트 에 쓰 여 있 습 니 다. 실행 에 영향 을 주지 않 습 니 다. vi netcheck.sh
#! /bin/bash
#        :                ,     ,        net.list  。
ARGS_NUM=$#
if [ $ARGS_NUM -eq 0 ]; then
  LIST="net.list"
elif [ $ARGS_NUM -eq 1 ]; then
  LIST=$1
  [ ! -f $LIST ] && echo "File[$LIST] does not exists !" && exit 1
else
  echo "Usage net_check.sh [net_list_file]" && exit 1
fi

#              ,          ,            ~~
#  java log4j,         printf  
#            , echo    
#FUNCTION
log(){
  if [ $# -eq 2 ];then
    printf "%-5s `date '+%F %T'` $2
" ${1^^} else printf "%-5s `date '+%F %T'` $*
" INFO fi } # , #FUNCTION ping_check(){ HOST=$1 log "Ping check : $HOST" ping -c 4 "$HOST" > /dev/null if [ $? -eq 0 ];then log "Ping $HOST successfully" else log "ERROR" "Ping $HOST failed" fi } # , #FUNCTION port_check(){ HOST=${1%%" "*} ## , 。 awk PORT=${1##*" "} ## , 。 log "Port check : $HOST $PORT" nc -w 10 -z $HOST $PORT > /dev/null if [ $? -eq 0 ];then log "Port $HOST $PORT successfully" else log "ERROR" "Port $HOST $PORT failed" fi } # ~~ #MAIN cat $LIST|grep -v "#"|while read line # # do NET=`echo ${line##" "}` #ltrim NET=`echo ${NET%%" "}` #rtrim [ -z "$NET" ] && continue #ignore null line NET_PARA_NUM=`echo "$NET"|awk -F[" "]+ '{print NF}'` # if [ $NET_PARA_NUM -eq 1 ]; then ping_check "$NET" elif [ $NET_PARA_NUM -eq 2 ]; then port_check "$NET" else log error "Please make sure your config\"$line\" with the format\"HOST [PORT]\"" fi done

vi net.list
#test ping
8.8.8.8
10.1.1.1
#test port
10.1.1.1 21
10.1.1.1 21 80

테스트 결과 전시:
INFO  2019-08-29 14:43:48 Ping check : 8.8.8.8
INFO  2019-08-29 14:43:51 Ping 8.8.8.8 successfully
INFO  2019-08-29 14:43:51 Port check : 10.1.1.1 21
ERROR 2019-08-29 14:43:51 Port 10.1.1.1 21 failed
ERROR 2019-08-29 14:43:51 Please make sure your config"10.1.1.1 21 80" with the format"HOST [PORT]"

좋은 웹페이지 즐겨찾기