Windows의 명령 프롬프트를 통해 이더넷 MAC 주소만 얻을 수 있는 방법이 있습니까?

Windows의 명령 프롬프트를 통해 이더넷 MAC 주소만 얻을 수 있는 방법이 있습니까?

모든 NIC 물리적 주소를 얻기 위해 ipconfig /all또는 를 사용합니다 .getmac /v

그러나 문제는 일반적으로 컴퓨터에 두 개 이상의 NIC 카드가 있다는 것입니다. 또한 Wi-Fi 핫스팟이 켜져 있을 때만 표시되는 Microsoft 가상 Wi-Fi 핫스팟 NIC와 같은 일부 가상 MAC 주소도 있습니다.

그렇다면 명령 프롬프트를 통해 이더넷에 해당하는 주소만 수집하려면 어떻게 해야 할까요?

출력: ( getmac /fo csv /vWi-Fi 핫스팟 사용 및 OFF)

"Connection Name","Network Adapter","Physical Address","Transport Name" "Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}" "Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60", "Media disconnected"

출력: ( getmac /fo csv /vWi-Fi 핫스팟 사용 및 ON)

"Connection Name","Network Adapter","Physical Address","Transport Name" "Ethernet","Realtek PCIe FE Family Controller","A0-2B-B8-27-62-12","\Device\Tcpi p_{F1FF9AF6-AD1A-4C5E-8717-C646C9AE466C}" "Wi-Fi","Qualcomm Atheros QCA9565 802.11b/g/n WiFi Adapter","28-E3-47-D2-FB-60", "Media disconnected" "Local Area Connection* 7","Microsoft Hosted Network Virtual Adapter","4A-E3-47- D2-FB-60","\Device\Tcpip_{630B2924-03A8-41C1-B1F2-D981A4C263C6}"

내 모든 어댑터 목록: (wmic nic) http://pastebin.com/zyz9LjJe

업데이트 (가능한 해결책): @DavidPostill과 @wmz의 답변 둘 다 많은 도움이 되었습니다. 마침내 가상 MAC 주소가 있는 모든 가상 어댑터를 제거하는 솔루션을 얻었습니다. x2-xx-xx-xx-xx-xx x6-xx-xx-xx-xx-xx xA-xx-xx-xx-xx-xx xE-xx-xx-xx-xx-xx

이러한 범위의 MAC 주소는 가상 MAC 어댑터에서 가장 많이 사용됩니다. https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines

따라서 getmac명령으로 모든 MAC 주소를 얻은 후 정규식을 사용하여 해당 가상 MAC 주소를 필터링할 수 있습니다. 또한, "Wi-Fi"로 MAC를 필터링하는 것이 "로컬 영역 연결"로 필터링하는 것보다 더 안정적이라는 것을 알 수 있습니다. 따라서 최종 LAN/이더넷 연결을 얻기 위해 이름에 "wi-fi"가 포함된 연결을 필터링합니다.

답변1

명령 프롬프트를 통해 이더넷 MAC 주소만 얻는 방법이 있습니까?

내장된 명령의 한 줄(그러나 복잡한) 시퀀스를 사용하여 필요한 작업을 수행할 수 있습니다.

명령줄에서:

for /f "usebackq tokens=3 delims=," %a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%~a

배치 파일에서:

for /f "usebackq tokens=3 delims=," %%a in (`getmac /fo csv /v ^| find "Local Area Connection"`) do set MAC=%%~a

어떻게 작동하나요?

우리는 다음을 사용할 수 있습니다:

getmac /fo csv /v

모든 로컬 네트워크 카드의 각 주소와 연결된 MAC(미디어 액세스 제어) 주소 및 네트워크 프로토콜 목록을 가져옵니다.

/v자세한 출력("연결 이름" 포함)을 얻으려면 이 옵션을 사용하십시오 . 나중에 어떤 어댑터가 연결인지 식별할 수 있도록 "연결 이름"이 필요합니다 Ethernet.

"Connection Name","Network Adapter","Physical Address","Transport Name"
"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"
"Wireless Network Connection","Atheros AR9285 Wireless Network Adapter","CC-AF-78-B2-4C-09","\Device\Tcpip_{B108BB0B-CCDC-4ACA-9DFE-5A2F17BC138D}"
"Bluetooth Network Connection","Bluetooth Device (Personal Area Network)","CC-AF-78-B2-4C-0A","Media disconnected"

|이 출력을 파이프로 연결하면 연결 이름이 "로컬 영역 연결"인 연결 find에 대한 정보만 추출할 수 있습니다 .Ethernet

getmac /fo csv /v ^| find "Local Area Connection"

다음과 같이 "로컬 영역 연결" 정보를 csv(쉼표로 구분) 형식으로 반환합니다.

"Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_{45B9E87F-83FB-4829-A751-6B62656CC1A8}"

세 번째(쉼표로 구분된) 값은 MAC 주소입니다.

이제 for위 문자열에서 MAC 주소만 추출하는 명령을 사용합니다.

문자열은 다음과 함께 (역따옴표) 문자를 for사용하여 명령 에 전달됩니다 .`usebackq

for /f "usebackq tokens=3 delims=," %a in (`string`) do

string다음과 같이 쉼표로 구분된 세 번째 토큰(값)을 반환합니다 .

"F0-BF-97-62-95-5D"

%~a문자열에서 따옴표를 제거하는 데 사용되며 다음과 같습니다.

F0-BF-97-62-95-5D

마지막으로 변수는 MAC다음과 같이 설정됩니다 F0-BF-97-62-95-5D.

set MAC=%~a

배치 파일에서 Every %%%.


추가 읽기

  • Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
  • 찾다- 파일에서 텍스트 문자열을 검색하고 발견된 모든 줄을 표시합니다.
  • /f에 대해- 다른 명령의 결과에 대해 명령을 반복합니다.
  • getmac- 로컬로 또는 네트워크를 통해 각 컴퓨터의 모든 네트워크 카드에 대한 각 주소와 연결된 MAC(미디어 액세스 제어) 주소 및 네트워크 프로토콜 목록을 표시합니다.
  • 매개변수- 명령줄 인수(또는 매개변수)는 배치 스크립트에 전달되는 모든 값입니다.
  • 세트- CMD 환경 변수를 표시, 설정 또는 제거합니다. SET로 변경한 내용은 현재 CMD 세션 동안에만 유지됩니다.

답변2

사용wmic

(이더넷 연결 인터페이스만 해당)

wmic nic where (AdapterTypeId=0 AND netConnectionStatus=2) get MACAddress

사용 가능한 속성에 대한 추가 정보: https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx

편집: David가 언급했듯이 이는 WiFi 어댑터도 반환합니다(OP가 원하는 것일 수도 있고 아닐 수도 있음). LAN 출력 이외의 항목을 필터링하는 빠르고 더러운 방법(연결 이름 기준):

wmic nic where "NetConnectionId like '%Local Area%' and AdapterTypeId=0 AND netConnectionStatus=2" get MACAddress

답변3

Powershell에서는 다음과 같이 수행합니다(Windows 8에는 Windows 7과 함께 제공되지 않는 Get-NetAdapter Cmdlet 기능이 있습니다).

(get-wmiobject win32_networkadapter -Filter "AdapterType LIKE 'Ethernet 802.3'") | select -expand macaddress
11:22:33:45:04:1E

답변4

파일에 mac 주소를 쓰는 좀 더 간단한 해결책을 찾은 것 같습니다.

@FOR /F %%i IN ('getmac /fo table /nh') DO ECHO %%i >> D:\mac.txt

컴퓨터의 mac 주소를 가져와서 디스크 D에 있는 mac.txt 파일에 씁니다.

코드 설명: /F 키를 사용하여 'getmac /fo table /nh' 명령(''으로 지정됨)을 @FOR 주기에 전달하고 명령 실행 결과를 변수 i에 할당하도록 지정합니다. 그런 다음 ECHO를 사용하여 변수 i 값을 파일에 씁니다. 나는 사용했다

getmac /fo table /nh

getmac /fo csv보다 간단한 출력을 얻으려면 getmac /fo table /nh의 출력이 다음과 같습니다.

00-03-7F-50-5C-0D   \Device\Tcpip_{AD7B1C5C-5027-46A3-B693-95D01D7A0C6C}

따라서 이 문자열을 @FOR 주기에 전달하기만 하면 됩니다. 이 경우 기본적으로 첫 번째 공백 이전에 파일을 읽고(특수 키를 정의할 필요 없음) 읽기 값을 변수 i에 할당합니다. 그런 다음 ECHO 명령을 사용하여 해당 값을 파일에 씁니다.

 DO ECHO %%i >> D:\mac.txt

>>는 파일에 정보를 추가하고 >는 파일을 덮어씁니다.

관련 정보