public CbxObjectItem(string text, int index, LibPcapLiveDevice dev, PcapAddress ipv4) { this.text = text; this.index = index; this.dev = dev; this.ipv4 = ipv4; }
public static IPAddressInfo GetIPAddressInfo(PcapDevice device) { PcapAddress pcap_address = null; pcap_address = device.Interface.Addresses .Where(a => a.Addr.type == Sockaddr.AddressTypes.AF_INET_AF_INET6 && a.Addr.ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) .FirstOrDefault(); if (pcap_address == null) { throw new InvalidOperationException("IP address not found"); } IPAddressInfo ipaddressinfo = new IPAddressInfo { IPAddress = pcap_address.Addr.ipAddress, Mask = pcap_address.Netmask.ipAddress, Gateway = device.Interface.GatewayAddresses?.FirstOrDefault() }; ipaddressinfo.IPNetwork = GetNetworkAddress(ipaddressinfo.Mask, ipaddressinfo.IPAddress); ipaddressinfo.IPBroadcast = GetBroadcastAddress(ipaddressinfo.Mask, ipaddressinfo.IPAddress); return(ipaddressinfo); }
void PopulateInterfaceCombobox() { LivePcapDeviceList deviceList = LivePcapDeviceList.Instance; if (deviceList.Count > 0) { foreach (LivePcapDevice device in deviceList) { PcapAddress address = GetIPV4Sockddr(device); cbInterface.Items.Add(String.Format("{0} -- {1}", device.Interface.FriendlyName, address.Addr.ipAddress)); } } }
private void LogDeviceList() { LivePcapDeviceList deviceList = LivePcapDeviceList.Instance; if (deviceList.Count < 1) { Log("No devices were found on this machine"); } else { Log(String.Format("The following devices are available on this machine:{0}", Environment.NewLine)); foreach (LivePcapDevice device in deviceList) { Log(device.Interface.FriendlyName); Log(String.Format("{0}: {1}", device.Description, device.Interface.Name)); PcapAddress address = GetIPV4Sockddr(device); Log(address.ToString()); } } }
/// <summary> /// Detekce, zda je adresa IPv4. /// </summary> private static bool IsIPV4(PcapAddress address) => address.Addr?.type != Sockaddr.AddressTypes.HARDWARE && IsIPV4(address.Addr?.ipAddress);
/// <summary> /// Funkce pro formátování IP adresy do čitelného formátu. /// </summary> /// <param name="address">Adresa rozhraní.</param> /// <returns> /// Naformátovaná podoba adresy. Pokud byla parametru 'address' null, nebo se jedná o HW adresu, tak se vrací null. /// </returns> private static string FormatIPAddress(PcapAddress address) => address?.Addr?.type == null || address.Addr.type == Sockaddr.AddressTypes.HARDWARE ? null : address?.Addr?.ToString();
private void btnReload_Click(object sender, EventArgs e) { NetworkInterface[] nicList = NetworkInterface.GetAllNetworkInterfaces(); cbxNic.Items.Clear(); for (int i = 0; i < LibPcapLiveDeviceList.Instance.Count; i++) { LibPcapLiveDevice dev = LibPcapLiveDeviceList.Instance[i]; /* NICデバイスのインデックスを取得 */ int did = 0; foreach (var ni in nicList.Where (x => dev.Interface.MacAddress.GetAddressBytes().SequenceEqual( x.GetPhysicalAddress().GetAddressBytes()))) { did = ni.GetIPProperties().GetIPv4Properties().Index; } PcapAddress ipv4 = null; foreach (PcapAddress addr in dev.Interface.Addresses) { ipv4 = addr; if (addr.Addr.sa_family == 2) /* IPv4*/ { break; } } int cidr = (ipv4.Addr.ipAddress.Address == 0) ? 0 : 32; for (; cidr != 0; cidr--) { if (0 != (ipv4.Netmask.ipAddress.Address & (1 << (cidr - 1)))) { break; } } string sItem = string.Format("{0:x2}: {1} - {2}/{3} - {5} ({4})", did, dev.Interface.MacAddress, ipv4.Addr, cidr, dev.Interface.Description, dev.Interface.FriendlyName); cbxNic.Items.Add(new CbxObjectItem(sItem, did, dev, ipv4)); } cbxNic.SelectedIndex = 0; /* デバイス列挙 */ foreach (LibPcapLiveDevice dev in LibPcapLiveDeviceList.Instance) { Debug.WriteLine("FriendlyName : " + dev.Interface.FriendlyName); Debug.WriteLine("Name : " + dev.Interface.Name); Debug.WriteLine("MacAddress : " + dev.Interface.MacAddress); Debug.WriteLine("Flags : " + dev.Interface.Flags); foreach (PcapAddress addr in dev.Interface.Addresses) { Debug.WriteLine("Addr-family :" + addr.Addr.sa_family.ToString()); Debug.WriteLine("Addr :" + addr.Addr); Debug.WriteLine("Netmask :" + addr.Netmask); Debug.WriteLine("Broadaddr :" + addr.Broadaddr); Debug.WriteLine("Dstaddr :" + addr.Dstaddr); } Debug.WriteLine("Description : " + dev.Interface.Description); Debug.WriteLine(""); } }