web-dev-qa-db-ja.com

リモートコンピュータのMACアドレスを取得する方法

特定の状況があります。ドメインにないリモートコンピュータからMACアドレスを取得したい。リモートコンピュータのホスト名とIPアドレスを知っています。私のコンピューターのIPアドレスは192.168.2.40で、リモートコンピューターのIPは192.168.2.41です。

私はもう試した:

arp -a <remote IP Address>
No ARP entries found.

nbtstat -n <remote hostname>
Host not found.

getmac /s <remote IP Address>
ERROR: The RPC server is unavailable.

コマンドライン、PowerShell、その他からリモートシステムのMACアドレスを取得することは可能ですか?どの条件を設定する必要がありますか?ありがとうございました。

8
culter

nmap は、MACアドレスだけでなく、知りたいことのほとんどすべてを返します。

マシンへの管理アクセス権がある場合、powershellとwmiはどちらもリモート診断を取得するのに非常に役立ちます。どちらもtechnet.Microsoft.comに広範なドキュメントがあります。

編集:これは、Windowsマシンを想定しています。これは、その外観からは、そうではない可能性があります。

6
jhayes

MACアドレスはイーサネットのものであり、インターネットのものではありません。コンピュータはMACアドレスを持っている必要はありません。 MACアドレスを取得する唯一の方法は、そのコンピューターと同じLANにあるコンピューターを取得してそれを通知することです。そして、それがあなたに正しい情報を与えていることを知る方法はないでしょう。

2人が同じイーサネットLANにいる場合は、コンピュータをpingして、ARPテーブルを調べるだけです。それ以外の場合は、同じEtherent/Wifi LAN内のコンピューターに問い合わせる必要があります。

7
David Schwartz

WMIから取得でき、WMIを読み取ることができるすべての言語でアクセスできます。 VBScript、JScript、Perl、Python、Powershellのすべてを使用してアクセスできます。

Powershellに具体的に尋ねたので、これが http://www.neolisk.com/techblog/powershell-getmacaddressofanyremoteip の例です。

param ( $Computer , $Credential )
#to make it work without parameters
if($Computer -eq $null) { $Computer = $env:COMPUTERNAME }
#program logic
$hostIp = [System.Net.Dns]::GetHostByName($Computer).AddressList[0].IpAddressToString
if($Credential) {
    $Credential = Get-Credential $Credential
    $wmi = gwmi -Class Win32_NetworkAdapterConfiguration -Credential $Credential -ComputerName $Computer
} else {
    $wmi = gwmi -Class Win32_NetworkAdapterConfiguration -ComputerName $Computer 
}
return ($wmi | where { $_.IpAddress -eq $hostIp }).MACAddress
6
gWaldo

うん。最も簡単な方法は、pingを実行し、ARPテーブルを確認することです。

物事を実際にインベントリして報告することにもっと興味があるなら、Spiceworks( http://www.spiceworks.com )のフリーソフトウェアを調べて、upp定数モニタリングを設定し、常に頻繁に行うことをお勧めします。環境全体に関する情報を簡単に入手できます。

私はそれを何年も使用してきましたが、LANでうまく機能します。

ただし、インベントリocf sofwtareをリモートサイトに送信する際にいくつかの問題がありますが、その理由はまだわかりませんが、それとは別に、強くお勧めします。

3
Juha Jurvanen

上記は少し複雑ですが、pingの後にエントリが見つからない場合は、サービスでルーティングとリモートアクセスを有効にする必要がありますが、おそらく無効になっています。次に、コマンドプロンプトに移動してarp -aを発行し、キャッシュを確認します。そのマシンのMACアドレスにはarp -a <IP>を使用します。

2
ChrisW

MACはOSIレイヤー2です-間にレイヤー3ホップがある場合、直接取得することはできません-安全性の理由から、そのようなデータをクエリするすべてのプロトコルは、LAN以外では許可しないでください...

2

あなたがコンピュータの簡単な名前を知っているなら、方法は次のようになります:

$strComputer ="ComuterName"
$colItems = Get-WmiObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName $strComputer -Filter "IpEnabled = TRUE"
ForEach ($objItem in $colItems)
{
    write-Host "IP Address: " $objItem.IpAddress[0]  "Mac: " $objItem.MacAddress
}

IPまたはホスト名で任意のマシンを取得できるより高度なスクリプト:

$device = "192.168.106.123"
if ( $device | ? { $_ -match "[0-9].[0-9].[0-9].[0-9]" } )
{
    echo "Searching MAC by IP"
    $ip = $device
} 
else 
{
    echo "Searching MAC by Host"
    $ip = [System.Net.Dns]::GetHostByName($device).AddressList[0].IpAddressToString
}
    $ping = ( new-object System.Net.NetworkInformation.Ping ).Send($ip);


if($ping){
    $mac = arp -a $ip;

    ( $mac | ? { $_ -match $ip } ) -match "([0-9A-F]{2}([:-][0-9A-F]{2}){5})" | out-null;

    if ( $matches )
     {
        $matches[0];
    } else 
    {
      echo "MAC Not Found"
     }
}
2
ahaw

私は質問がドメインシステムなしであったことを知っていますが、以下のドメインコンピュータの例を探してこれにつまずく可能性のある人にとっては、それを行うための迅速かつ簡単な方法です。

ウィンドウでは、次のことができます

    $c = "computername" 
    Invoke-Command -ComputerName $c -ScriptBlock {

    getmac 
    }

リモートシステムで基本的なコマンドプロンプトコマンドを実行し、データを返すだけです。

1
Knight

あなたはこれを試すことができます:

nbtstat -A 192.168.2.41

(かなり冗長な)生成された応答でリモートMACアドレスを取得します。

1
ADieuNePlaise

「nmap -v -A [ホスト名/ IPアドレス]」が最良の選択です。クライアントのUNIX OSでは、ネイティブで使用できる場合があります。 nmapはWindowsクライアントでも利用できます...

0
Jaro