0

Debian サーバーがあり、その MAC アドレスを /usr フォルダーの txt ファイルに保存しました。

マシンを起動するたびに、実行しようとしているスクリプトは現在の MAC アドレスをチェックし、それを txt ファイルに保存されているものと比較する必要があります。それらが一致しない場合、マシンはシャットダウンする必要があります。

コードは Windows で動作しますが、debian で動作させる必要があります。だから私はモノをインストールし(apt-get install mono-complete)、コードを含む.csファイルを作成し、debianマシンに転送しました。

mcs shutdown.cs (shutdown は作成したファイルの名前です) コマンドを実行すると、次のエラーが発生します。

CS0234: 型または名前空間名 'NetworkInformation' は、名前空間 'System.Net' に存在しません。アセンブリ参照がありませんか?**

これはどのように解決できますか?

using System.Net.NetworkInformation;

      static void Main(string[] args)
      {
          string newmc = Convert.ToString(GetMacAddress()); //current mac address
          string mc = File.ReadAllText(@"/usr/mc.txt"); //mac address saved on a       txt file previously
          if (newmc != mc)   //shutdown if the mac addresses dont match
          {
              System.Diagnostics.Process.Start("shutdown.exe", "-s -t 0"); 
           }
      }
      static string GetMacAddress()
      {
          string macAddresses = "";
          foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
          {
             if (nic.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;
             if (nic.OperationalStatus == OperationalStatus.Up)
             {
                macAddresses += nic.GetPhysicalAddress().ToString();
                break;
             }
           }
         return macAddresses;
        }
4

3 に答える 3

0

System.Net.NetworkInformation.NetworkInterfaceクラスは、次のようにSystem.dllにあります:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface。コンパイル時にSystem.dllへの参照を追加しようとしましたか?私はそれがmcsへの「-r」引数だと信じています。

ところで、Monoのどのバージョンを使用していますか。Debianは、非常に古いバージョンのMonoを「安定した」フレーバーで出荷することで有名です。安定しているため、現在、Mono2.10.x以降が推奨されています。

于 2012-07-12T23:04:10.307 に答える
0

System.Net.NetworkInformation.NetworkInterface は .NET 2.0 で導入されました。使用する場合は、.NET 2.0 プロファイル以降をターゲットにする必要があります。

コマンド ライン コンパイラを使用してコンパイルする場合は、gmcs または dmcs を使用してプロジェクトをコンパイルします。MonoDevelop を使用している場合は、プロジェクトで適切なフレームワーク バージョンを設定する必要があります。

于 2012-07-13T06:59:23.967 に答える
-1

これは、Rubyでこれを行う方法です。

begin
  theMac = File.read("/usr/path/to/text/file.txt")

rescue Exception => e
  puts e.message
  puts e.backtrace.inspect
end

response = `ifconfig eth0`
mac = response.match(/HWaddr (.*?):(.*?):(.*?):(.*?):(.*?):(.*?) /)

if theMac == mac[0] then `sudo shutdown -h now`; end

f = File.open("/usr/path/to/text/file.txt", "w")
f.write(mac[0])
f.close()
于 2012-07-12T22:24:42.063 に答える