Windows 에서 bat 일괄 처리 스 크 립 트 는 telnet 를 사용 하여 원 격 포트 소 기 를 대량으로 검사 합 니 다.
리 눅 스 처럼 간단하게 판단 할 수 있 을 줄 알 았 는데:
echo q|telnet -e 'q' $ip $port && echo "$ip:port "||echo "$ip:port "
결과 Windows 아래 telnet 종료 결과 의 반환 값 이 실행 되 지 않 은 것 으로 나 타 났 습 니 다.도움 을 빌리다
그래서 나 는 게 으 른 사람의 법칙 을 먼저 열 고 다른 대체 도 구 를 찾 았 다.과연 윈도 할머니 집에 서 찾 았 습 니 다.
Portqry: https://support.microsoft.com/en-us/kb/310099/zh-cn
확실히 사용 할 수 있 습 니 다.하지만 검 측 속 도 는 칭찬 할 수 없습니다.통 하 는 것 과 통 하지 않 는 것 이 모두 느 립 니 다!수중 에 더 좋 은 해결 방법 이 없 음 을 감안 하여 먼저 시험 해 보고 제 가 쓴 Portqry 관련 demo 를 붙 여 보 세 요.
:: 【PortQry】 :
@echo off & setlocal enabledelayedexpansion
rem IP
set server_ip='192.168.1.1,192.168.1.2,192.168.1.3'
set serverport='9922'
rem
call :check
::**** ****
:check
rem ※ --PortQry ※
for /f "tokens=1,* delims=," %%i in ("!server_ip!") do (
echo %%i !serverport! ...
rem :
"!tools_dir!\PortQry.exe" -n %%i -p tcp -e !serverport! | find "LISTENIN" >nul && (
echo 【 】: %%i:!serverport!
) || (
echo 【 】: %%i:!serverport!
)
echo=
set server_ip=%%j
goto check
)
goto :eof
::******* ********
P:check 은 call 에서 호출 된 모듈 입 니 다.그 안의 일부 변 수 는 소개 하지 않 습 니 다.그래서 흥 에 겨 운 패키지 가 exe 로 되 어 IDC(server 2003 시스템)에 실 행 됐 고 그 결과 첫 번 째 대 는 비극 적 이 었 습 니 다!원 격 데스크 톱 이 바로 끊 겼 습 니 다:
그리고 다 시 는 연결 이 되 지 않 습 니 다.그들 에 게 기관실 에 가서 보라 고 했 는데 시스템 이 없어졌다 고 했 습 니 다!!?너무 충격 적 이 야.나무 있어?간단 한 텍스트 조작 스 크 립 트 가 시스템 을 해 치 웠 습 니까?그리고 스 크 립 트 에 삭제 명령 이 존재 하지 않 습 니 다...
그 쪽 에서 시작 오류 정 보 를 제공 해 야 하 는데 시스템 안내 가 고장 났 군요.
개인 적 으로 분석 해 보 니 Portqry 라 는 도구 로 인해 시스템 블 루 스크린 이 꺼 져 서 안내 가 손상 되 었 을 것 입 니 다!
니 마,친정 사람들 이 소개 할 때'성격'이 좋다 고 했 는데?
에이,이 공 구 는 감히 사용 할 수 없 을 것 같 아.숲 이 크 면 모든 시스템 이 다 있다 는 속담 이 있 잖 아!
2.새로운 길 을 개척 하 다
공 구 를 감히 사용 할 수 없 으 니 코드 를 계속 괴 롭 히 는 것 이 좋 겠 다!주말 에 자기 전에 갑자기 영감 이 떠 올 랐 습 니 다.tasklist 가 창 이름 을 판단 하 는'실전 묘기'가 생각 났 습 니 다.그래서 막 닫 은 공책 을 다시 열 었 습 니 다.마침내 GF 의 끊 임 없 는 불평 끝 에 이 문 제 를 해결 하 였 습 니 다.
① 창 판단
생각 은 간단 합 니 다.start 명령 을 사용 하여 새 창 에서 telnet-e 와 exit 명령 을 실행 합 니 다.포트 가 잘 통 하면 새로 연 창 은 바로 닫 히 고 통 하지 않 는 창 은 30 분 정도 유 지 됩 니 다.또한 창 이름 은 telnet 192.168.1.1 과 유사 합 니 다.이 30 분 동안 스 크 립 트 가 통 하 는 지 안 통 하 는 지 판단 할 수 있 습 니 다.
그래서 위의 check 부분 을 다음 과 같이 수정 합 니 다.
:: telnet
@echo off & setlocal enabledelayedexpansion
rem IP
set server_ip='192.168.1.1,192.168.1.2,192.168.1.3'
set serverport='9922'
rem
call :check_port
::**** ****
:check_port
rem ※ --telnet ※
for /f "tokens=1,* delims=," %%i in ("!server_ip!") do (
echo [No.!check_num!]: %%i !serverport! ...
rem telnet, , 3 telnet , !
start /min cmd.exe /k "echo q|telnet -e 'q' %%i !serverport! & exit"
ping -n 3 127.1>nul
rem “Telnet ${ip}” cmd , IP
tasklist /fi "windowtitle eq Telnet %%i" | find "cmd.exe" >nul && (
echo 【 】: %%i:!serverport!
) || (
echo 【 】: %%i:!serverport!
)
echo=
set server_ip=%%j
goto check_port
)
goto :eof
:: ...
이렇게 하면 Windows 에서 telnet 에서 원 격 포트 를 탐지 하 는 문 제 를 해결 할 수 있 습 니 다.또한 검 측 속 도 는 마이크로소프트 의 어느 portqry 보다 훨씬 빠 릅 니 다.역시 생각 은 기술 보다 더 중요 합 니 다.생각 만 있 으 면 그 어떠한 기술 도 병목 이 되 어 서 는 안 됩 니 다!② 프로 세 스 판단[최신 보충]
창 으로 판단 하 는 방안 을 통 해 각 기관실 에서 실 시 했 을 때 또 하나의 문제 가 발생 했 습 니 다!창 판단 은 일부 버 전의 Windows 에서 통 하지 않 습 니 다.예 를 들 어 영어 버 전의 명령 프롬프트 창 이름과 중국어 버 전이 다 르 기 때문에 이 방안 도 완선 되 지 않 습 니 다!
그래서 계속 귀 를 긁 고 볼 을 긁 으 며 두 번 째 방안 을 생각해 냈 다.텔 넷 프로 세 스 의 수량 을 판단 하여 네트워크 가 잘 통 하 는 지 여 부 를 판단 하 는 것 이다.
프로젝트 아이디어:
a. telnet.exe ,
b. , start cmd telnet
c. telnet.exe ( telnet )
d. telnet , IP
예제 코드:
:: telnet
@echo off & setlocal enabledelayedexpansion
rem IP
set server_ip='192.168.1.1,192.168.1.2,192.168.1.3'
set serverport='9922'
::**** ****
rem telnet.exe , telnet.exe
call :telnet_num conf
rem
call :check_port
:check_port
set /a check_num+=1
rem ※ ※
for /f "tokens=1,* delims=," %%i in ("!server_ip!") do (
echo [No.!check_num!]: %%i !serverport! ...
::call :set_iPSec %%i
rem telnet , , 3 telnet , !
start /min cmd.exe /k "echo q|telnet -e 'q' %%i !serverport! & exit"
echo=
set server_ip=%%j
set total_num=!check_num!
goto check_port
)
ping -n 3 127.1>nul
# telnet , telnet
call :telnet_num
echo :!telnet_num!
goto :eof
:telnet_num
rem telnet , telnet
set conf=0
for /f "delims=*" %%i in ('tasklist ^| findstr "telnet.exe"') do (
if "%1"=="conf" (
set /a conf+=1
) else (
set /a telnet_num+=1
)
)
set /a telnet_num=!telnet_num!-!conf!
goto :eof
내 가 모든 IP 중 몇 개가 통 하지 않 는 지 테스트 한 것 은 분명 하 다.안 타 깝 게 도 어떤 IP 가 통 하지 않 는 지 알 수가 없 었 습 니 다.그러나 수중 에 있 는 이 케이스 에 서 는 구체 적 으로 통 하지 않 는 IP 가 필요 없 이 통 하 는 IP 가 기준 에 달 했 는 지 만 알 면 된다.자,드디어 이 문 제 를 해결 했다.자만 심이 아니 라 언제든지 여러 가지 방안 을 제시 해 야 한 다 는 것 은 분명 하 다.그렇지 않 으 면 문제 가 생기 면 곤경 에 빠 질 것 이다.물론 기술 보다 아이디어 가 더 중요 하 다 는 것 을 다시 한 번 설명 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
배치 파일에서 IP 주소 변경 간소화 (win10)배치 파일을 마우스 오른쪽 버튼으로 클릭 관리자로 실행을 선택 사용자 계정 제어 화면에서 "예"를 선택 이상 해설 두 번째 줄은 IP 주소 변경 세 번째 줄은 우선 DNS 서버 변경 네 번째 줄은 대체 DNS 서버 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.