Example #1
0
        internal PcapInterface(PcapUnmanagedStructures.pcap_if pcapIf)
        {
            Name        = pcapIf.Name;
            Description = pcapIf.Description;
            Flags       = pcapIf.Flags;

            // retrieve addresses
            Addresses = new List <PcapAddress>();
            IntPtr address = pcapIf.Addresses;

            while (address != IntPtr.Zero)
            {
                //A sockaddr struct
                PcapUnmanagedStructures.pcap_addr addr;

                //Marshal memory pointer into a struct
                addr = (PcapUnmanagedStructures.pcap_addr)Marshal.PtrToStructure(address,
                                                                                 typeof(PcapUnmanagedStructures.pcap_addr));

                PcapAddress newAddress = new PcapAddress(addr);
                Addresses.Add(newAddress);

                // is this a hardware address?
                // if so we should set our internal m_macAddress member variable
                if ((newAddress.Addr != null) &&
                    (newAddress.Addr.type == Sockaddr.AddressTypes.HARDWARE))
                {
                    if (m_macAddress == null)
                    {
                        m_macAddress = newAddress;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("found multiple hardware addresses, existing addr "
                                                                   + MacAddress.ToString() + ", new address " + newAddress.Addr.hardwareAddress.ToString());
                    }
                }

                address = addr.Next;                 // move to the next address
            }
        }
Example #2
0
		internal PcapInterface(PcapUnmanagedStructures.pcap_if pcapIf) {
			Name = pcapIf.Name;
			Description = pcapIf.Description;
			Flags = pcapIf.Flags;

			// retrieve addresses
			Addresses = new List<PcapAddress>();
			IntPtr address = pcapIf.Addresses;
			while (address != IntPtr.Zero) {
				//A sockaddr struct
				PcapUnmanagedStructures.pcap_addr addr;

				//Marshal memory pointer into a struct
				addr = (PcapUnmanagedStructures.pcap_addr)Marshal.PtrToStructure(address,
																				 typeof(PcapUnmanagedStructures.pcap_addr));

				PcapAddress newAddress = new PcapAddress(addr);
				Addresses.Add(newAddress);

				// is this a hardware address?
				// if so we should set our internal m_macAddress member variable
				if ((newAddress.Addr != null) &&
				   (newAddress.Addr.type == Sockaddr.AddressTypes.HARDWARE)) {
					if (m_macAddress == null) {
						m_macAddress = newAddress;
					} else {
						throw new System.InvalidOperationException("found multiple hardware addresses, existing addr "
																   + MacAddress.ToString() + ", new address " + newAddress.Addr.hardwareAddress.ToString());
					}
				}

				address = addr.Next; // move to the next address
			}
		}