예제 #1
0
        /// <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;
            }
        }
예제 #2
0
        /// <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;
            }
        }