/// <summary> /// 根据IP寻找对应Mac /// </summary> /// <param name="ip"></param> /// <returns></returns> public static MacIp FindArpByIP(string ip) { try { MacIp arp = null; lock (list) { foreach (MacIp mi in list) { arp = mi; break; } } if (arp == null) { string mac = NetUtils.GetMacAddress(ip); arp = new MacIp(mac, ip); list.Add(arp); return(arp); } return(arp); } catch (Exception e) { throw e; } }
/// <summary> /// 生成链路层数据包 /// </summary> /// <param name="srcIp"></param> /// <param name="dstIp"></param> /// <param name="type"></param> public static byte[] GeneratLinkData(string srcIp, string dstIp, PacketType type, byte[] data) { try { MacIp dstMacIp = MyArp.FindArpByIP(dstIp); MacIp srcMacIp = MyArp.FindArpByIP(srcIp); byte[] packet = new byte[data.Length + 14]; Array.Copy(Encoding.ASCII.GetBytes(srcMacIp.MAC), 0, packet, 0, 6); Array.Copy(Encoding.ASCII.GetBytes(dstMacIp.MAC), 0, packet, 6, 6); Array.Copy(BitConverter.GetBytes(Convert.ToInt32(type)), 0, packet, 12, 2); Array.Copy(data, 0, packet, 14, data.Length); return(packet); } catch (Exception e) { throw e; } }