11

C# を使用して Wake on LAN を実装する最善の方法は何ですか?

この機能は、LAN 環境 (インターネット経由ではない) のマシンに必要です。この方法は、ファイアウォールやその他の問題に対処できるほど堅牢である必要があります。また、この機能をサポートしていない、または無効にしているシステムの場合、代替手段はありますか?

主な目的は、LAN 経由で (シャットダウン/休止状態から) マシンをウェイクアップすることです。これは、C# を使用してプログラムすることです。

ガイドしてください。

PS:私は以下に出くわしました:

  1. http://blog.memos.cz/index.php/team/2008/06/12/wake-on-lan-in-csharp
  2. http://community.bartdesmet.net/blogs/bart/archive/2006/04/02/3858.aspx
  3. http://www.codeproject.com/KB/IP/cswol.aspx

ただし、私はこれに慣れていないため、ソリューションが十分に包括的であるかどうかを判断できませんでした。誰かが上記の記事のいずれかに従うことを推奨できれば、それは役に立ちます.

4

3 に答える 3

15

WOL の問題を機能させるには、次の 3 つの問題を明確にする必要があります。

  1. イーサネット ケーブル経由で WOL を送信する
  2. そのようなパケットをリッスンしてウェイクアップするように PC を構成する
  3. パケットが送信者から受信者 (ファイアウォール、ゲートウェイなど) に到達することを確認します。

既にネット上で見つけたように、C# でプログラムされた最初の問題に対する既存の解​​決策がいくつかあります (リンクをざっと読んだ後、最初のものから始めます)。

2 つ目は、ネットワーク アダプターを構成することによってのみ達成できるものです。そのようなオプションが存在し、有効にできる場合は、デバイス マネージャーを開いて、ネットワーク アダプターのプロパティを調べてください。これは、すべてのネットワーク アダプターにその機能の別の実装があり、それを有効にする方法があるため、プログラムすることはできません。

3 番目の問題も C# では解決できません。これは純粋なネットワークの問題であり、ルーター、ゲートウェイ、ids-systems などを構成して、そのようなパケットを許可し、送信者から受信者に流れるようにする必要があります。WOL パケットは常にブロードキャスト パケット (dest-ip 255.255.255.255) であるため、ローカル ネットワークを離れることはなく、ルーター、ゲートウェイ、またはネットワーク間のその他のブリッジ (vpn など) から常にドロップされます。等。)。

最後になりましたが、最初の問題はいくつかの小さなパケットに分割できることを思い出してください。

于 2009-05-14T07:27:06.923 に答える
6

Poul Bak の回答を試してみましたが、ターゲット コンピューターを起動できませんでした。サードパーティのアプリケーションであるWakeMeOnLanが実際にターゲット コンピューターをスリープ解除できることを確認した後、次のコードを書きました。

void SendWakeOnLan(PhysicalAddress target)
{   
    var header = Enumerable.Repeat(byte.MaxValue, 6);
    var data = Enumerable.Repeat(target.GetAddressBytes(), 16).SelectMany(mac => mac);

    var magicPacket = header.Concat(data).ToArray();
    
    using var client = new UdpClient();

    client.Send(magicPacket, magicPacket.Length, new IPEndPoint(IPAddress.Broadcast, 9));
}

使用法:

次のようにターゲット コンピュータの MAC アドレスを渡すだけです。

SendWakeOnLan(PhysicalAddress.Parse("0A-0B-0C-0D-0E-0F"));

この回答と Poul Bak の回答の主な違いは、このコードが IPv4/IPv6 でのマルチキャストの代わりに IPv4 経由のブロードキャストを使用していることであり、ネットワーク機器がマルチキャストを正しく処理/セットアップしていない可能性があります。

于 2021-01-01T12:48:03.853 に答える