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


6

내가 사용 ipconfig /all또는 getmac /v모든 NIC 실제 주소를 얻을 수 있습니다.

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

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

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

"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 핫스팟 사용 및 사용 )

"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

따라서 모든 MAC 주소를 getmac명령으로 가져온 후 정규식을 사용하여 해당 가상 MAC 주소를 필터링 할 수 있습니다. 또한 "wi-fi"로 MAC을 필터링하면 "로컬 영역 연결"로 필터링하는 것보다 더 안정적입니다. 따라서 이름 내에 "wi-fi"로 연결을 필터링하여 최종 LAN / 이더넷 연결을 얻습니다.


Windows 용 GNU 사용하는 이 답변 을 보셨습니까 ? grep
JakeGould

1
당신은 당신이있는 경우에 무엇을 원하는가 보다 더 NIC 카드를?
DavidPostill

@DavidPostill, 최종 사용자의 인터페이스 이름 변경 방법에 관계없이 LAN / 이더넷 MAC 주소 만 가져와야합니다.
Sourav Ghosh

다음 은 귀하의 질문에 대한 정확한 답변입니다. (이 질문은 중복 된 것 같습니다)
Just Shadow

답변:


9

명령 프롬프트를 통해 이더넷 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 (Media Access Control) 주소 및 네트워크 프로토콜 목록을 가져옵니다.

/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

배치 파일에서 모든 파일 %은로 대체되어야합니다 %%.


더 심어

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

하나는이 싹둑보고하는 인터페이스 '왜냐하면 어떤 진수 식별자를 식별 할 수있는 방법에 대해 자세히 설명 할 수 있습니다 pastebin.com/raw.php?i=RqD7Uhdu 당신이 MAC 주소 및 일부 진수 식별자 얻을
barlop

@barlop 이는 예제에서 getmac /v옵션을 사용하지 않기 때문 입니다. 명확하게 답변을 업데이트하겠습니다. Thnaks.
DavidPostill

1
감사합니다. 그러나 내 컴퓨터 인터페이스 이름은 '이더넷'입니다. 그래서 사용해야했습니다 getmac /fo csv /v | find "Ethernet". 기계를 독립적으로 만드는 방법이 있습니까? 코드는 모든 컴퓨터에서 작동합니다. 또한 다른 설명이 필요합니다. 출력을 파이핑하기 전에 왜 캐럿 부호를 사용 했습니까? getmac /fo csv /v ^| find "Local Area Connection"캐럿은 예약 된 쉘 문자를 계속하고 탈출하는 데 사용됩니다.
Sourav Ghosh

1
캐럿 ^은 예약 문자 (파이프) for와 같이 역 따옴표와 함께 사용할 때 이스케이프 문자로 필요합니다|
DavidPostill

getmac /fo csv /v 컴퓨터 의 출력을 포함하도록 질문을 편집하십시오 .
DavidPostill

5

사용 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


이 명령은 랩탑 의 LAN 어댑터 무선 어댑터 MAC 주소를 모두 반환합니다 .
DavidPostill

@DavidPostill 예 참, 내가 그를 필터링 할 몇 가지 기준을 추가하려고합니다 ... 어떤 이유로 무선 어댑터가 802.3 윽로보고있는 것 같습니다
WMZ

LAN NIC의 이름을 "이더넷"으로 변경 한 것으로 보이는 OP에 대해서는 새 명령이 여전히 작동하지 않습니다 (적어도 제 답변에 대한 의견에 따르면). 그는 일반적인 답변을 찾고 있습니다 ... : /
DavidPostill

@DavidPostill True 당신은 다른 속성을 사용하기 위해 (또는 당신의) 접근 방식을 조정할 수 있습니다 (예 : 어댑터 이름에서 이더넷을 찾으십시오). 그러나 일반적인 솔루션을 제공하는 것은 놀랍게도 어렵습니다 (우리가 win8로 제한하지 않는 한)
wmz

1
@SouravGhosh 1. 승리 8-당신은 Get-NetAdapter를 사용할 수 있습니다 (나는 그것을 테스트하지 않았으므로 100 % 확실하지 않아서 원하지 않는 모든 것을 걸러 낼 수는 없습니다)-예를 들어이 팁을보십시오 : powershellmagazine.com / 2013 / 04 / 04 /… 2. 열은 링크 된 msdn 페이지에 설명되어 있습니다.
wmz

2

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.