Bash 스크립트, bash의 내장 /dev/tcp를 사용하여 포트 응답, 시간 지연 가속 확인 |

Bash 스크립트, bash의 내장 /dev/tcp를 사용하여 포트 응답, 시간 지연 가속 확인 |

이 스크립트를 사용하여 호스트가 특정 포트에서 응답하는지 확인합니다.Bash의 내장 /dev/tcp.

IP 주소나 도메인(호스트 이름)을 사용할 수 있습니다.

스크립트 1

#!/bin/bash

HOST_NAME="127.1"
HOST_PORT="80"

if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
    echo -e "PORT: ${HOST_PORT} | ON"
    else
    echo -e "PORT: ${HOST_PORT} | OFF"
fi

exit;

스크립트 2

#!/bin/bash

HOST_NAME="127.1"

for HOST_PORT in {1..1000}
do

if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
    echo -e "PORT: ${HOST_PORT} | ON"
    else
    echo -e "PORT: ${HOST_PORT} | OFF"
fi
done

exit;

스크립트 3

#!/bin/bash

HOST_NAME="127.1"
declare -A PORT_ON

for HOST_PORT in {1..65535}
do
    if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then
        PORT_ON[${HOST_PORT}]="ON"
    fi
done

for i in ${!PORT_ON[*]}
do
    echo -e "$i : ${PORT_ON[$i]}"
done

exit;

일부 로컬 및 온라인 도메인에서스크립트 3방화벽이나 기타 서비스로 인해 SSH와 같은 일부 포트에서 중단되고 다음 포트 스캔으로 이동하는 데 시간이 더 오래 걸립니다. 어떻게 관리할 수 있는지, 즉시 계속할 수 있는지, 스크립트 속도를 높일 수 있는지, 65535 포트를 모두 스캔하면 시간이 오래 걸립니다.

내 GNU/Linux 배포판:

Distributor ID: Debian

Description:    Debian GNU/Linux 10 (buster)

Release:        10

Codename:       buster

4.19.0-16-amd64

내 /etc/apt/sources.list

deb http://security.debian.org/debian-security buster/updates main contrib

deb-src http://security.debian.org/debian-security buster/updates main contrib

deb http://deb.debian.org/debian/ buster-updates main contrib

deb-src http://deb.debian.org/debian/ buster-updates main contrib

이 저장소에서만 설치할 수 있습니다.

Bash 스크립트, bash의 내장 /dev/tcp를 사용하여 포트 응답, 시간 지연 가속 확인 |

시간 지연의 속도를 높이고 종료하는 방법은 무엇입니까?

답변1

이것을 실행하십시오 timeout.

실행시간을 확인하기 위해 타이머 변수를 넣었습니다.

비교할 수는 없는 것 같습니다 0.01.

를 사용하여 이 스크립트를 실행하면 0.001타이머 변수의 결과만 표시되고 다른 내용은 표시되지 않습니다.

1, 0.1또는 를 사용해도 0.01항상 동일한 결과를 얻게 됩니다.

이 스크립트를 Ubuntu 22.04에서 테스트하고 포트를 10000으로 설정했습니다.

#!/bin/bash

starttime=$(date +%s)
HOST_NAME="127.0.0.1"
declare -A PORT_ON

for HOST_PORT in {1..10000}
do
 if((timeout 0.1 bash -c "</dev/tcp/${HOST_NAME}/${HOST_PORT}") 2> /dev/null); then
    PORT_ON[${HOST_PORT}]="ON";
  fi
done

for i in ${!PORT_ON[*]}
do
  echo -e "$i: ${PORT_ON[$i]}"
done

endtime=$(date +%s)

echo "runtime: $(($endtime - $starttime))"

관련 정보