是否有可能找到直接有线连接设备的MAC地址?

时间:2013-06-14 06:42:52

标签: networking network-programming ip mac-address

我想在线路的另一侧读取连接设备的MAC地址。 假设有2个设备,它们通过电线直接连接。 第一个(DeviceX)已配置以太网接口(静态IP ....)。 第二个(DeviceY)对DeviceX一无所知,但它们是物理连接的。

有哪些方法可以从DecviceY读取DeviceX MAC地址? 可以通过DeviceX回复一些数据包从DeviceY发送一些特定的数据包吗?

我可以免费访问DeviceY的网络API,但是关于DeviceX我什么也做不了。

提前致谢。

2 个答案:

答案 0 :(得分:6)

连接到同一TCP / IP本地网络的计算机可以确定彼此的MAC地址。称为 ARP 的技术 - TCP / IP附带的地址解析协议使其成为可能。

从Windows终端“arp -a”给出ARP条目列表

有关ARP go to this link

的更多信息

____ EDIT _____

@ arthur86这可以通过从设备X(广播)发送“Gratuitious ARP”来完成。免费ARP请求是AddressResolutionProtocol请求数据包,其中源和目标IP都设置为发出数据包的机器的IP,目标MAC是广播地址ff:ff:ff:ff:ff:ff。

设备Y将使用Device X MAC更新其arp缓存。使用arp缓存条目,Device Y可以获取Device X的IP和MAC。

Check this link for details about Gratuitious ARP

答案 1 :(得分:0)

在批处理文件中使用命令GETMAC

@echo off 
Title With GETMAC Command
@For /f "tokens=1 delims=," %%a in ('getmac /NH /FO csv ^| find /I "N/A"') do  (
    Set "MAC=%%~a"
)
echo MAC Address = %MAC%
pause

或在这样的批处理文件中使用WMIC

@echo off 
Title with WMIC
@for /f "delims=" %%M in (
'Wmic Nicconfig Where IPEnabled^=true list full ^| find /I "MACAddress"'
) do ( 
    Set "%%M"
)
echo MAC Address = %MACAddress%
pause

或者与Batch和Windows PowerShell v4.0一起使用:您可以执行以下代码:

@echo off 
Title Get-NetAdapter Physical 
@for /f "tokens=2 delims=Up" %%a in ('Powershell -C "Get-NetAdapter -Physical" ^| findstr /I "Up"') do (
    @for /f "tokens=2 delims= " %%b in ('echo "%%a"') do (
        Set "PhysicalAddress=%%b"
    )
)
echo MAC Address = %PhysicalAddress% 
pause

或者您也可以这样做:

@echo off
Title GET Interface Description and MAC ADDRESS NET With Get-NetAdapter in Powershell And Batch
Set psCmdInterface="&{Get-NetAdapter -Physical | Where-Object { $_.Status -eq 'Up' } | Select-Object -Property InterfaceDescription}"
Set psCmdMAC="&{Get-NetAdapter -Physical | Where-Object { $_.Status -eq 'Up' } | Select-Object -Property MacAddress}"
REM Powershell -C %psCmdInterface%
for /f "Skip=3 tokens=1 delims=" %%a in ('Powershell -C %psCmdInterface%') do Set "Interface=%%a"
REM Powershell -C %psCmdMAC%
@for /f "Skip=3 tokens=1 delims= " %%a in ('Powershell -C %psCmdMAC%') do Set "MAC=%%a"
echo Interface = "%Interface%"
echo MAC ADDRESS = %MAC%
pause
Exit