PE부팅후 다른 디스크이 OS에서 IP값 찾기 배치 파일입니다. 도움을..
2017.12.21 14:58
질답에 쓸까하다가 질문보다는 소스를 고치는 내용이라 이곳에 씁니다.
며칠동안 이 작업을 했습니다.
간단한듯하면서도 초보인 저에게는 어렵네요.
유지보수 업을 하다보니 요런게 꼭 필요할때가 있더라구요.
기존의 다른 분꺼는 자료가 오래되어 잘 안되어서 제가 직접 짜집기 편집하였습니다.
여기의 여러 고수님들 배치파일을 참고 하기도 하였습니다. 비슷한 문구(suk님)가 보이더라도 이해해주시면 감사하겠습니다.
첨부에 2개의 배치파일을 올립니다.
PE용 IP_Find_PE.cmd 파일은 대부부의 OS가 Windows7 x86 환경이다 보니 잘 실행되었습니다. (PE에서 테스트)
IP_Find_Windows.cmd 요 파일은 고수님들 테스트 용 입니다. 그냥 C 드라이브에서 관리자 권한으로 실행하시면됩니다.
제 PC는 Windows10 RS3 64bit 환경이며 잘 테스트 되었습니다.
문제는.....PE용인데...
초보다 보니 배치 짜는게 어설퍼 깔끔하지 못하고 중복이 많을겁니다. 전문가의 솜씨로 고수의 숨결을 느끼고 싶네요.
저도 공부가 되고..ㅎㅎ
여러가지 PC환경을 고려하지 못하였기에...많이 부족합니다. 이부분은 고수님들의 도움을 간절히 바랍니다.
예) 64bit OS 환경이라던가.. DHCP 일 경우이거나..
참고로..
배치 파일 명령어로만으로는 너무 어려워 sed.exe 프로그램을 사용하였습니다.
이 소스는 다른 배치 파일에 포함될 예정이라 goto MainMenu로 했습니다.
IP_Find_PE.cmd 내용
@echo off
@color 1f
@cd /d %~dp0
@mode con cols=85 lines=35
setlocal enabledelayedexpansion
set ip=IPAddress
set subnet=SubnetMask
set gateway=DefaultGateway
set dns=NameServer
set Reg_Location=ControlSet001
:Find_IP
if /i "%systemdrive%"=="X:" (set W=W) else (set W=W X)
set k=0
for %%a in (C D E F G H I J K L M N O P Q R S T U V %W% Y Z) do if exist %%a:\Windows\System32\Config\SYSTEM (set /a k+=1& set drv=%%a& call :run)
if %k%==0 (
echo.
echo _____________________________________________________________________________________
echo.
echo 하드디스크 드라이브에서 Windows 를 찾지 못 했습니다.
echo ____________________________________________________________________________________
echo.
echo 아무키나 누르시면 메인 화면으로 돌아갑니다.
echo ____________________________________________________________________________________
pause >nul
goto MainMenu
)
echo.
echo ________________________________________________________________
echo.
echo 아무키나 누르시면 메인 화면으로 돌아갑니다.
echo ________________________________________________________________
pause >nul
goto MainMenu
:run
if /i "%systemdrive%"=="%drv%:" set load=SYSTEM
if /i not "%systemdrive%"=="%drv%:" set load=load
reg load HKLM\load "%drv%:\Windows\System32\Config\SYSTEM"
for %%a in (%ip%,%subnet%,%gateway%,%dns%) do (
reg query "HKLM\%load%\%Reg_Location%\Services\Tcpip\Parameters\Interfaces" /v %%a /s >>IP_Address_All.txt
)
for %%a in (%ip%,%subnet%,%gateway%,%dns%) do (
sed -n s/%%a/%%a/gp IP_Address_All.txt >>IP_Address1.txt
)
sed /0.0.0.0/d IP_Address1.txt >IP_Address2.txt
sed -n s/%ip%/%ip%/gp IP_Address2.txt >IP_Address.txt
sed -n s/%subnet%/%subnet%/gp IP_Address2.txt >IP_Address_subnet.txt
sed -n s/%gateway%/%gateway%/gp IP_Address2.txt >IP_Address_gateway.txt
sed -n s/%dns%/%dns%/gp IP_Address2.txt >IP_Address_dns.txt
for /f "tokens=4" %%a in ('dir IP_Address2.txt /a:-d') do (
if %%a==0 goto noIP
)
for /f "tokens=3 usebackq" %%a in ("IP_Address.txt") do (
set ip=%%a
)
for /f "tokens=3 usebackq" %%a in ("IP_Address_subnet.txt") do (
set subnet=%%a
)
for /f "tokens=3 usebackq" %%a in ("IP_Address_gateway.txt") do (
set gateway=%%a
)
for /f "tokens=3 usebackq" %%a in ("IP_Address_dns.txt") do (
set dns=%%a
)
if "%ip%"=="IPAddress" goto noIP
if "%ip%"=="" goto noIP
cls
color 5f
@mode con cols=64 lines=17
echo.
echo *작업 완료 %drv%:Windows\System32\Config\SYSTEM Registry 추출 결과
echo ________________________________________________________________
echo.
echo IP 주소: %ip%
echo.
echo 서브넷마스크: %subnet%
echo.
echo 게이트웨이: %gateway%
echo.
echo DNS 주소: %dns%
goto unLoad
:noIP
cls
echo _____________________________________________________________________________________
echo.
echo * 현재 위치: HKLM\%load%\%Reg_Location%\Services\Tcpip\Parameters\Interfaces
echo _____________________________________________________________________________________
echo.
echo 찾으시는 IP 주소가 없습니다.
echo _____________________________________________________________________________________
echo.
echo 찾는 레지스트리의 위치값이 다를 수 있습니다.
echo.
echo DHCP 상태의 인터넷 환경일 수 있습니다.
echo _____________________________________________________________________________________
echo.
echo 아무키나 누르시면 다른 위치값의 레지스트리를 검색합니다.
echo _____________________________________________________________________________________
pause >nul
if /i "%Reg_Location%"=="ControlSet001" (
set Reg_Location=CurrentControlSet
goto Find_IP
)
if /i "%Reg_Location%"=="CurrentControlSet" (
set Reg_Location=ControlSet002
goto Find_IP
)
if /i "%Reg_Location%"=="ControlSet002" (
cls
echo _____________________________________________________________________________________
echo.
echo * 현재 위치: HKLM\%load%\%Reg_Location%\Services\Tcpip\Parameters\Interfaces
echo _____________________________________________________________________________________
echo.
echo 레지스트리 검색결과 IP 주소를 찾을 수없습니다.
echo.
echo DHCP 상태의 인터넷 환경일 수 있습니다.
echo _____________________________________________________________________________________
echo.
echo 아무키나 누르시면 메인 화면으로 돌아갑니다.
echo _____________________________________________________________________________________
pause >nul
call :unLoad
goto MainMenu
)
goto Find_IP
:unLoad
if /i not "%systemdrive%"=="%drv%:" reg unLoad HKLM\%load% 1>nul 2>nul
del IP_Address*.txt
요 결과는 제 컴에서 실행한것입니다.
댓글 [7]
-
이세라 2017.12.21 15:04 -
하이하루 2017.12.21 15:14
네 감사합니다. 사설 IP라...생각없이 올렸네요. 수정합니다.
-
DarknessAngel 2017.12.21 17:54
사설ip는 얼마든지 올려도 상관없습니다
공인이 아닌 이상 남이 알아도 뭔가 할 수 있는것 없습니다
-
바람낙엽 2017.12.21 18:55
Win10 TH2 x64 DHCP 에서 IP_Find_Windows.cmd 실행 결과
--
아무 정보(DHCP)도 표시 없음...
가능하면 컴퓨터이름/작업그룹 도 표시되면 좋음..
--
-
하이하루 2017.12.21 19:06
DHCP면 IP를 찾을 수 없다는 메시지가 나옵니다.
Windows에서는 관리자 권한으로 실행하셔야합니다. 그냥 실행하면 그림과 같은 화면입니다.
좀더 나은 배치파일 개선을 위해 올렸습니다. 고수님의 손길이...
-
suk 2017.12.21 20:18
DHCP 윈도 64비트 환경에서 테스트 했습니다. 실컴과 pe에서 전부 작동합니다
bat 파일만으로 작동합니다. 저도 이런 걸 쓸 일이 없어서 자세히는 모릅니다.
ipconfig 명령을 참고로 했습니다.
-
하이하루 2017.12.22 00:03
헐...저는 아직도 PE에서 테스트 중이었습니다.
손대면 손댈 수록 안되는 부분이 생겨서 미치는줄.....
한방에 해결해버리시네요.
공부에 도움이 되고 또 실제 사용에도 도움이 될 것같습니다. 여러모로 감사합니다.
이런거는 고정 IP를 사용하는 환경에 꼭 필요합니다.
OS를 재설치하거나 이미지로 복구하기 전에 IP를 깜빡하고 작업하면...
IP를 임의로 주게됩니다.
그러다 보면 회사 전체 IP 사용 환경이 뒤죽박죽됩니다.
만약 바이러스가 네트워크 환경에서 설치면 나중에 문제 생긴 PC 찾아 가기가 힘들어집니다.
뭐 여러가지 이유가....
아뭏튼 suk님 도움을 자주 받는 일인입니다. 감사합니다. 새해 복 많이 받으시고 매리 크리스마스입니다.
실컴 정보 노출은 안하시는게 좋습니다.