[英]How to check if a string stored in a variable is the same as an ip address from netstat -nao in batch
這是我第一次問一個問題,所以不要對我加倍努力。
我正在參加一個小捕獲flag事件的競賽,並且正在編寫一些簡單的批處理腳本以提供一些幫助。
該程序的目的是檢查netstat -nao
輸出是否在dontkill
變量中。 如果是的話,請不要殺死它。 如果不是,則查找進程ID並終止連接。 dontkill
將包含我的IP地址,這樣它就不會dontkill
我與計算機的遠程連接。
看起來很簡單,但是我遇到了很大的麻煩,因為我不知道如何很好地批量編寫。
到目前為止,這是我的代碼:
for /L %%i in (1,0,) do @for /f "tokens=5" %%j in ('netstat -nao ^| findstr ^"ESTABLISHED^"' ) do @taskkill /f /PID %%j
這會繼續進行,查找所有已建立的連接,並在無限循環中終止它們。 我已經嘗試過此命令的許多不同變體,並且我認識到我在第二個do中需要某種if/else
語句來檢查dontkill
是否與循環中變量%%a
中存儲的內容相同:
for /f "tokens=3" %%a in('"netstat -nao^|findstr ^"ESTABLISHED^"')
我知道這在其他腳本語言中可能會更容易些,但必須是批處理的,因為我將在其上使用的計算機將是全新安裝的Windows XP,Server 2003、2008和Win7。
好的,在變量a的正上方的for循環中,像這樣輸出“ 192.168.1.230:1003”,因此它具有ip地址和以冒號分隔的端口。
我需要能夠將其與僅具有IP地址的變量dontkill進行比較。
有什么方法可以擺脫:1003,以便我可以將其與變量dontkill進行比較。
我一直在弄亂諸如
SET line="192.168.1.241:10256"
SET string3=%line::[0-9]*=%
但這不起作用。
為了清楚起見,我正在嘗試從“ 192.168.1.241:10256”轉到“ 192.168.1.241”,以便我可以將最終結果與dontkill進行比較並決定要做什么。
我在這里先向您的幫助表示感謝。
須藤代碼///////////////////////////////////////////////// ///////////////// DONTKILL =“ 192.168.1.241”
FOR(在第3列和第5列中按FINDSTR。FINDSTR篩選的過程數)
VAR A IS THE COLUMN 3 INFO which is some ip address with port "192.168.1.241:1003"
VAR B IS THE COLUMN 5 INFO which is PID "1524"
IF(DONTKILL == A)
DONTKILL THAT PROCESS
ELSE
KILL THAT PROCESS USING
TASKKILL /F /PID B
我從http://blog.commandlinekungfu.com/2010/01/episode-76-say-hello-to-my-little.html獲得了這種方法的靈感
像這樣 :
@echo off&cls
setlocal EnableDelayedExpansion
set "DONTKILL=127.0.0.1"
for /f "tokens=1-5 delims= " %%a in ('netstat -nao ^| find /i "ESTABLISHED"' ) do (
echo [%%a] [%%b] [%%c] [%%d] [%%e]
call:GetIP %%c
if !$IP!==%DONTKILL% (
echo IP !$IP! IS EQUAL TO DONTKILL [%DONTKILL%]
echo.
) else (
echo IP !$IP! IS NOT EQUAL TO DONTKILL [%DONTKILL%]
echo.
)
)
exit/b
:GetIP
for /f "tokens=1 delims=:" %%a in ('echo %1') do (
set "$IP=%%a"
goto:eof)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.