朋友做出来的远程开机项目在寝室试验成功,就是不知道是什么原理,请高手分析来自:http://bbs.ccsdn.com/read.php?tid=268using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Runtime.InteropServices;namespace LanStartUp
{
    public partial class frmTelnet : Form
    {
        public frmTelnet()
        {
            InitializeComponent();
        }        [DllImport("ws2_32.dll")]
        private static extern int inet_addr(string cp);
        [DllImport("IPHLPAPI.dll")]
        private static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 pMacAddr, ref Int32 PhyAddrLen);        //开机
        private void button1_Click(object sender, EventArgs e)
        {
            string s = this.textBox1.Text;
            string[] sl = s.Split(Convert.ToChar("-"));
            byte[] mac = new byte[6];
            for (int i = 0; i < 6; i++)
            {
                mac[i] = ConvertHexToBytes(sl[i]);
            }            // 发一个BroadCast包,包的内容包括以下数据就可以了。
            // FF FF FF FF FF FF,6个FF是数据的开始,
            // 紧跟着16次MAC地址就可以了。
             UdpClient client = new UdpClient();
              client.Connect(IPAddress.Broadcast, 30000);
              
              byte[] packet = new byte[17 * 6];
  
              for (int i = 0; i < 6; i++)
                  packet[i] = 0xFF;             for (int i = 1; i <= 16; i++)
                 for (int j = 0; j < 6; j++)
                    packet[i * 6 + j] = mac[j];             int result = client.Send(packet, packet.Length);        }
        //将HEX转化为BYTES
        public static byte ConvertHexToBytes(string value)
        {
            int len = value.Length / 2;
            byte[] ret = new byte[len];
            for (int i = 0; i < len; i++)
                ret[i] = (byte)(Convert.ToInt32(value.Substring(i * 2, 2), 16));
            return ret[0];
        }        //根据IP获取MAC地址
        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == "")
            {
                MessageBox.Show("请输入正确的IP!");
            }
            else
            {
                textBox1.Text = GetMacAddress(textBox2.Text);
            }
        }        //获取远程IP(不能跨网段)的MAC地址
        private string GetMacAddress(string hostip)
        {
            string Mac = "";
            try
            {
                Int32 ldest = inet_addr(hostip); //将IP地址从 点数格式转换成无符号长整型
                Int64 macinfo = new Int64();
                Int32 len = 6;
                //根据IP获取MAC
                SendARP(ldest, 0, ref macinfo, ref len);
                string TmpMac = Convert.ToString(macinfo, 16);//转换成16进制
                Mac = TmpMac.Substring(0, 2).ToUpper();
                for (int i = 2; i < TmpMac.Length; i = i + 2)
                {
                    Mac = TmpMac.Substring(i, 2).ToUpper() + "-" + Mac;
                }
            }
            catch
            {
                MessageBox.Show("获取远程主机的MAC错误:请输入正确的IP!");
            }
            return Mac;
        }
    }
}