Сканирование сети
От: Sergey J. A. Беларусь  
Дата: 23.02.05 14:11
Оценка:
Hello all !

Хочу написать небольшой сканер шар и дальше папок и файлов. Но вот не могу найти как это делается в .Net. В WinAPI есть ф-ии WNet* которыми я пользовался, а в .Net их аналога я не нашёл. Подскажите в какую сторону копать...
Знаю, что можно WNet* ф-ии как-то импортировать, но может быть есть более "правильный" способ ?
Я — свихнувшееся сознание Джо
Re: Сканирование сети
От: Disa Россия  
Дата: 23.02.05 17:21
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

Я искал способ этого решения в .NET и ненашел.
ПОэтому использовал как ты и сказал ф-ии WNet*!!
Re[2]: Сканирование сети
От: Sergey J. A. Беларусь  
Дата: 24.02.05 06:59
Оценка:
Здравствуйте, Disa, Вы писали:

D>Я искал способ этого решения в .NET и ненашел.

D>ПОэтому использовал как ты и сказал ф-ии WNet*!!

А может есть под рукой кусок кода, как эти ф-ии мипортируются ?
Я — свихнувшееся сознание Джо
Re[3]: Сканирование сети
От: Disa Россия  
Дата: 24.02.05 07:20
Оценка: 9 (2)
Здравствуйте, Sergey J. A., Вы писали:

Вообщето это я нарыл в гугле но это работает

#region NetView



        [DllImport("mpr.dll", CharSet=CharSet.Auto)]
        public static extern int WNetEnumResource(IntPtr hEnum, ref int lpcCount,
            IntPtr lpBuffer,ref int lpBufferSize );

        [DllImport("mpr.dll", CharSet=CharSet.Auto)]
        public static extern int WNetOpenEnum(RESOURCE_SCOPE dwScope, RESOURCE_TYPE dwType,
            RESOURCE_USAGE dwUsage, 
            [MarshalAs(UnmanagedType.AsAny)][In] Object lpNetResource, 
            out IntPtr lphEnum);

        [DllImport("mpr.dll", CharSet=CharSet.Auto)]
        public static extern int WNetCloseEnum( IntPtr hEnum );
        //declare the structures to hold info
        public enum RESOURCE_SCOPE
        {
            RESOURCE_CONNECTED = 0x00000001,
            RESOURCE_GLOBALNET = 0x00000002,
            RESOURCE_REMEMBERED = 0x00000003,
            RESOURCE_RECENT= 0x00000004,
            RESOURCE_CONTEXT= 0x00000005
        }
        public enum RESOURCE_TYPE
        {
            RESOURCETYPE_ANY= 0x00000000,
            RESOURCETYPE_DISK= 0x00000001,
            RESOURCETYPE_PRINT = 0x00000002,
            RESOURCETYPE_RESERVED = 0x00000008,
        }
        public enum RESOURCE_USAGE
        {
            RESOURCEUSAGE_CONNECTABLE =0x00000001,
            RESOURCEUSAGE_CONTAINER=0x00000002,
            RESOURCEUSAGE_NOLOCALDEVICE =0x00000004,
            RESOURCEUSAGE_SIBLING=0x00000008,
            RESOURCEUSAGE_ATTACHED=0x00000010,
            RESOURCEUSAGE_ALL =(RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
        }
        public enum RESOURCE_DISPLAYTYPE
        {
            RESOURCEDISPLAYTYPE_GENERIC= 0x00000000,
            RESOURCEDISPLAYTYPE_DOMAIN= 0x00000001,
            RESOURCEDISPLAYTYPE_SERVER= 0x00000002,
            RESOURCEDISPLAYTYPE_SHARE= 0x00000003,
            RESOURCEDISPLAYTYPE_FILE = 0x00000004,
            RESOURCEDISPLAYTYPE_GROUP= 0x00000005,
            RESOURCEDISPLAYTYPE_NETWORK= 0x00000006,
            RESOURCEDISPLAYTYPE_ROOT = 0x00000007,
            RESOURCEDISPLAYTYPE_SHAREADMIN = 0x00000008,
            RESOURCEDISPLAYTYPE_DIRECTORY = 0x00000009,
            RESOURCEDISPLAYTYPE_TREE = 0x0000000A,
            RESOURCEDISPLAYTYPE_NDSCONTAINER = 0x0000000B
        }
        public struct NETRESOURCE
        {
            public RESOURCE_SCOPE dwScope;
            public RESOURCE_TYPE dwType;
            public RESOURCE_DISPLAYTYPE dwDisplayType;
            public RESOURCE_USAGE dwUsage;
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpLocalName;
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpRemoteName;
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpComment;
            [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpProvider;
        }
        public void WNETOE(Object o, TreeNode ANode)
        {
            int iRet;
            IntPtr ptrHandle = new IntPtr();
            try
            {
                iRet =WNetOpenEnum( 
                    RESOURCE_SCOPE.RESOURCE_GLOBALNET, 
                    RESOURCE_TYPE.RESOURCETYPE_ANY,
                    RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER, 
                    o, 
                    out ptrHandle );
                if( iRet != 0 )
                    return; 
                int entries;
                int buffer = 16384;
                IntPtr ptrBuffer = Marshal.AllocHGlobal( buffer );
                NETRESOURCE nr;
                for(;;)
                {
                    entries = -1;
                    buffer = 16384;
                    iRet =WNetEnumResource( ptrHandle, ref entries, ptrBuffer, ref buffer );
                    if( (iRet != 0) || (entries < 1) )
                        break;
                    Int32 ptr = ptrBuffer.ToInt32();
                    for( int i = 0; i < entries; i++ )
                    {
                        nr = (NETRESOURCE)Marshal.PtrToStructure( new IntPtr(ptr), typeof(NETRESOURCE) );
                        ptr += Marshal.SizeOf( nr );
                        TreeNode node=ANode.Nodes.Add(nr.lpRemoteName.Replace("\\",""));
                        if(RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER == (nr.dwUsage
                            & RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER))
                        {
                            WNETOE(nr,node);
                        }                        
                    }
                }
                Marshal.FreeHGlobal( ptrBuffer );
                iRet =WNetCloseEnum( ptrHandle );
            }
            catch(Exception e)
            {
            }
        }
        public enum NERR
        {
            NERR_Success = 0,/* Success */
            ERROR_MORE_DATA = 234, // dderror
            ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
            ERROR_INVALID_LEVEL = 124,
            ERROR_ACCESS_DENIED = 5,
            ERROR_INVALID_PARAMETER = 87,
            ERROR_NOT_ENOUGH_MEMORY = 8,
            ERROR_NETWORK_BUSY = 54,
            ERROR_BAD_NETPATH = 53,
            ERROR_NO_NETWORK = 1222,
            ERROR_INVALID_HANDLE_STATE = 1609,
            ERROR_EXTENDED_ERROR= 1208
        }
        #endregion

        public void FilltvComps()
        {

            try
            {
                btnRefresh.Enabled=false;
                tvComps.BeginUpdate();
                tvComps.Nodes.Clear();
                tvComps.Nodes.Add("Сеть");
                WNETOE(null,tvComps.Nodes[0]);
            }
            catch(Exception e)
            {
                String S=e.ToString();
                richTextSend.Text=S;
            }
            finally
            {
                tvComps.EndUpdate();
                tvComps.ExpandAll();
                btnRefresh.Enabled=true;
            }
        }
        public void ThreadStart()
        {
            byte[] bytes = new byte[1024];
            while(true)
            {
                try
                {            
                    Socket s=ser.AcceptSocket();
                    s.Receive(bytes);
                    richText.Text=ASCIIEncoding.ASCII.GetString(bytes);            
                    string str_time=DateTime.Now.ToString();
                    labelTime.Text=str_time;
                        //s.LocalEndPoint.AddressFamily.ToString();
        //            System.Net.Sockets.
                    labelWhoTo.Text="Кто кому: "+s.LocalEndPoint.ToString()+" : "+s.RemoteEndPoint.ToString();
                    
//                    fileMessXML.WriteMessage(str_time,s.LocalEndPoint.ToString(),s.RemoteEndPoint.ToString(),richText.Text);
    //                CheckButtons();
                }
                catch(Exception z)
                {}
            }
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.