public static ArrayList FindAllDevs() { ArrayList devarraylist = new ArrayList(); pcap_if devlist; devlist.addresses = IntPtr.Zero; devlist.description = (new StringBuilder()).ToString(); devlist.flags = 0; devlist.name = (new StringBuilder()).ToString(); devlist.next = IntPtr.Zero; IntPtr tmpptr = IntPtr.Zero; StringBuilder err = new StringBuilder(256); IntPtr head = IntPtr.Zero; if (LoadLibrary("wpcap.dll") == IntPtr.Zero) { MessageBox.Show(null, "Please install the Npcap driver, which can be found on https://nmap.org/npcap/ .", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } if (pcap_findalldevs(ref tmpptr, err) == -1) { return(null); } else { head = tmpptr; while (tmpptr.ToInt32() != 0) { Device tmpDevice = new Device(); devarraylist.Add(tmpDevice); devlist = (pcap_if)Marshal.PtrToStructure(tmpptr, typeof(pcap_if)); tmpDevice.Name = devlist.name; tmpDevice.Description = devlist.description; if (devlist.addresses.ToInt32() != 0) { pcap_addr addr = (pcap_addr)Marshal.PtrToStructure(devlist.addresses, typeof(pcap_addr)); if (addr.addr.ToInt32() != 0) { sockaddr ip = (sockaddr)Marshal.PtrToStructure(addr.addr, typeof(sockaddr)); tmpDevice.Address = ip.addr[0].ToString() + "." + ip.addr[1].ToString() + "." + ip.addr[2].ToString() + "." + ip.addr[3].ToString(); } if (addr.netmask.ToInt32() != 0) { sockaddr netmask = (sockaddr)Marshal.PtrToStructure(addr.netmask, typeof(sockaddr)); tmpDevice.Netmask = netmask.addr[0].ToString() + "." + netmask.addr[1].ToString() + "." + netmask.addr[2].ToString() + "." + netmask.addr[3].ToString(); } } tmpptr = devlist.next; } pcap_freealldevs(head); } return(devarraylist); }
public static ArrayList FindAllDevs() { ArrayList devarraylist = new ArrayList(); pcap_if devlist; devlist.addresses = IntPtr.Zero; devlist.description = (new StringBuilder()).ToString(); devlist.flags = 0; devlist.name = (new StringBuilder()).ToString(); devlist.next = IntPtr.Zero; IntPtr tmpptr = IntPtr.Zero; StringBuilder err = new StringBuilder(256); IntPtr head = IntPtr.Zero; if (pcap_findalldevs(ref tmpptr, err) == -1) { return(null); } else { head = tmpptr; while (tmpptr.ToInt32() != 0) { Device tmpDevice = new Device(); devarraylist.Add(tmpDevice); devlist = (pcap_if)Marshal.PtrToStructure(tmpptr, typeof(pcap_if)); tmpDevice.Name = devlist.name; tmpDevice.Description = devlist.description; if (devlist.addresses.ToInt32() != 0) { pcap_addr addr = (pcap_addr)Marshal.PtrToStructure(devlist.addresses, typeof(pcap_addr)); if (addr.addr.ToInt32() != 0) { sockaddr ip = (sockaddr)Marshal.PtrToStructure(addr.addr, typeof(sockaddr)); tmpDevice.Address = ip.addr[0].ToString() + "." + ip.addr[1].ToString() + "." + ip.addr[2].ToString() + "." + ip.addr[3].ToString(); } if (addr.netmask.ToInt32() != 0) { sockaddr netmask = (sockaddr)Marshal.PtrToStructure(addr.netmask, typeof(sockaddr)); tmpDevice.Netmask = netmask.addr[0].ToString() + "." + netmask.addr[1].ToString() + "." + netmask.addr[2].ToString() + "." + netmask.addr[3].ToString(); } } tmpptr = devlist.next; } pcap_freealldevs(head); } return(devarraylist); }
private unsafe IList <Device> GetAllDevices() { List <Device> deviceList = new List <Device>(); IntPtr deviceListPtr = IntPtr.Zero; IntPtr currentAddress; try { StringBuilder errorBuffer = new StringBuilder(PCAP_ERRBUF_SIZE); int returnCode = pcap_findalldevs(ref deviceListPtr, errorBuffer); if (returnCode != 0) { throw new ApplicationException("Cannot enumerate devices: [" + errorBuffer.ToString() + "]."); } IntPtr ip = deviceListPtr; while (ip != IntPtr.Zero) { pcap_if dev = (pcap_if)Marshal.PtrToStructure(ip, typeof(pcap_if)); Device device = new Device(); device.Name = dev.name; device.Description = dev.description; device.Addresses = new List <uint>(); currentAddress = dev.addresses; while (currentAddress != IntPtr.Zero) { pcap_addr address = *(pcap_addr *)currentAddress; if (address.addr != IntPtr.Zero) { sockaddr_in sockaddress = *(sockaddr_in *)address.addr; if (sockaddress.sin_family == AF_INET) { device.Addresses.Add(sockaddress.sin_addr); } } currentAddress = address.next; } deviceList.Add(device); ip = dev.next; } } catch (Exception ex) { throw new ApplicationException("Unable to get WinPcap device list.", ex); } finally { // always release memory after getting device list. if (deviceListPtr != IntPtr.Zero) { pcap_freealldevs(deviceListPtr); } } return(deviceList); }