我有一个debian服务器,我将其mac地址保存在/ usr文件夹中的txt文件中。
每次启动机器时,我正在尝试的脚本应该检查当前的mac地址并将其与txt文件中保存的地址进行比较。如果它们不匹配,机器应该关机。
代码适用于Windows,但我必须使它在debian上运行。所以我安装了mono(apt-get install mono-complete),创建了包含代码的.cs文件并将其传输到debian机器上。
当我运行mcs shutdown.cs(shutdown是我创建的文件的名称)命令时出现此错误:
CS0234:命名空间“System.Net”中不存在类型或命名空间名称“NetworkInformation”。你错过了装配参考吗?**
如何解决这个问题?
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;
}
答案 0 :(得分: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版本而闻名。现在推荐Mono 2.10.x或更高版本稳定。
答案 1 :(得分:0)
System.Net.NetworkInformation.NetworkInterface引入了.NET 2.0。如果要使用它,则需要定位.NET 2.0配置文件或更新版本。
如果使用命令行编译器进行编译,请使用gmcs或dmcs来编译项目。 如果您使用的是MonoDevelop,则需要在项目设置中设置适当的框架版本。
答案 2 :(得分:-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()