コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: RawPCap.cs プロジェクト: trotlinebeercan/machina
        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);
        }