求实现net view功能的源代码,多谢,保证结分。

解决方案 »

  1.   

    向局域网广播地址如192.168.0.255:137端口发送广播数据包(udp),数据报的内容就是nbns协议规定的。nbns协议的内容可以先执行命令nbtstat -A 192.168.0.110,然后用抓包工具获得,或者去网上nbns的资料net view的原理就是 发送一个广播请求,然后从应答的包中取出应答者的netbios name(机器名)。不过net view好像有缓存机制,可以用nbtstat -A 192.168.0.110命令进行强制抓包windows启动后,如果电脑没有配置wins服务器地址,会向局域网广播地址如192.168.0.255:137端口发送广播数据包(udp),数据报的内容就是nbns协议规定的,发送这个广播数据报的作用就是判断局域网内是否有同名电脑存在;如果电脑配置有wins服务器,会向wins服务器发送这个请求
      

  2.   

    参考http://topic.csdn.net/t/20030513/07/1774883.html
      

  3.   

    主要函数与相关数据结构分析
        1. 建立空会话
        WNetAddConnection2(&nr,username,password,0);
        //nr为NETRESOURCE数据结构的对象;
        //username为建立空会话的用户名,在此将用户名设置为NULL;
        //password为登陆密码,在此将密码设置为NULL;    2. 撤消空会话
        WNetCancelConnection2(ipc,0,TRUE);
        //ipc为TCHAR的指针,我们可以这样获得:
        //swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]),argv[1]为主机名或地址;    3. 探测主机时间
        nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf);
        //参数server为主机的名称或地址;
        //pBuf为TIME_OF_DAY_INFO数据结构的指针;
        //nStatus为NET_API_STATUS成员;    4. 探测操作系统指纹
        NetServerGetInfo(server,dwLevel,(PBYTE *)&pBuf);
        //dwLevel为等级数,我们选择的是101级;
        //pBuf是SERVER_INFO_101数据结构的指针;    5. 探测共享列表
        NetShareEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
        //dwLevel的等级数为1级;
        //pBuf是SHARE_INFO_1数据结构的指针;
        //MAX_PREFERRED_LENGTH指定返回数据的长度;
        //er指明返回的实际可以枚举的成员数目;
        //tr返回所有的成员数目;
        //resume用于继续进行共享搜索;    6. 探测用户列表
        NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf);
        //dwLevel的等级数为1级;
        //i为枚举的索引;
        //dwRec返回获取的信息数目;
        //pBuf为NET_DISPLAY_USER数据结构的指针;    7. 探测本地组列表
        NetLocalGroupEnum(server,dwLevel,(PBYTE *)&pBuf,-1,&er,&tr,&resume);
        //dwLevel的等级是1;
        //pBuf返回LOCALGROUP_INFO_1数据结构的指针;    8. 探测组列表
        NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf);
        //dwLevel的等级为3;
        //pGBuf返回NET_DISPLAY_GROUP的数据结构指针;    9. 探测组内的用户
        NetGroupGetUsers(server,pGBuffer->grpi3_name,0,(PBYTE *)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
        //pGBuffer->grpi3_name为组的名称;
        //pUBuf返回GROUP_USERS_INFO_0数据结构的指针;    10.探测传输协议列表
        NetServerTransportEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
        //dwLevel的等级为0级;
        //pBuf返回SERVER_TRANSPORT_INFO_0数据结构的指针;    11.探测会话列表
        NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
        //pszClient指定客户的地址;
        //pszUser指定用户名;
        //dwLevel的等级是10级;
        //pBuf返回SESSION_INFO_10数据结构的指针;    12.释放内存
    NetApiBufferFree(pBuf);
    //释放由系统分配的内存空间。
      

  4.   

    源代码#define  UNICODE
    #define  _UNICODE#include <windows.h>
    #include <winnetwk.h>
    #include <tchar.h>
    #include <lm.h>#pragma  comment (lib,"mpr")
    #pragma  comment (lib,"netapi32")void start();
    void usage();
    int  datetime(PTSTR server);
    int  fingerprint(PTSTR server);
    int  netbios(PTSTR server);
    int  users(PTSTR server);
    int  localgroup(PTSTR server);
    int  globalgroup(PTSTR server);
    int  transport(PTSTR server);
    int  session(PTSTR server);int wmain(int argc,TCHAR *argv[])

        NETRESOURCE nr;
        DWORD ret;
        TCHAR username[100]=_T("");
        TCHAR password[100]=_T("");
        TCHAR ipc[100]=_T("");    system("cls.exe");
        start();
        if(argc!=2)
        {
            usage();
            return -1;
        }
        swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]);
        nr.lpLocalName=NULL;
        nr.lpProvider=NULL;
        nr.dwType=RESOURCETYPE_ANY;
        nr.lpRemoteName=ipc;
        ret=WNetAddConnection2(&nr,username,password,0);
        if(ret!=ERROR_SUCCESS)
        {
            _tprintf(_T("\nIPC$ Connect Failed.\n"));
            return -1;
        }    datetime(argv[1]);
    fingerprint(argv[1]);
        netbios(argv[1]);
        users(argv[1]);
        localgroup(argv[1]);
        globalgroup(argv[1]);
        transport(argv[1]);
        session(argv[1]);    ret=WNetCancelConnection2(ipc,0,TRUE);    
        if(ret!=ERROR_SUCCESS)
        {
            _tprintf(_T("IPC$ Disconnect Failed.\n"));
            return -1;
        }
        return 0;
    }
      

  5.   

    int datetime(PTSTR server)
    {
        PTIME_OF_DAY_INFO  pBuf=NULL;
        NET_API_STATUS nStatus;
        DWORD              lerror;    _tprintf(_T("\n*** Date and Time ***\n"));
        nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf); 
        if(nStatus==NERR_Success)
        { 
            if(pBuf!=NULL)
            {
                _tprintf(_T("\nCurrent date:\t%.2d-%.2d-%d"),pBuf->tod_month,pBuf->tod_day,pBuf->tod_year);
                _tprintf(_T("\nCurrent time:\t%.2d:%.2d:%.2d.%.2d (GMT)"),pBuf->tod_hours,pBuf->tod_mins,pBuf->tod_secs,pBuf->tod_hunds);
                pBuf->tod_hours=(pBuf->tod_hours+8)%24;
                _tprintf(_T("\nCurrent time:\t%.2d:%.2d:%.2d.%.2d (GMT+08:00)\n"),pBuf->tod_hours,pBuf->tod_mins,pBuf->tod_secs,pBuf->tod_hunds);
            } 
        }
        else
        {
            lerror=GetLastError();
            if(lerror==997)
            {
                _tprintf(_T("\nDateTime:\tOverlapped I/O operation is in progress. \n"));
            }
            else                            
            {
                  _tprintf(_T("\nDatetime Error:\t%d\n"),lerror);
            }
        }
        if(pBuf!=NULL)
        {
            NetApiBufferFree(pBuf);
        }
        return 0;
    }
      

  6.   

    mpr.lib  显示打不开啊?怎么回事,高手指点
      

  7.   

    这源代码不全吧,那些像datetime,一类的函数怎么只定义了datetime一个。。其他的呢?急用,谢谢!
      

  8.   

    当然不全了
    CSDN规定不能连续发贴超过3次阿
    去我的下载区下载吧
    都是免积分下载
      

  9.   

    你的下载区,给个地址,怎么去?另外,请问楼上,利用WnetOpenEnum、WnetEnumResource、WNetCloseEnum,这些函数是否可以达到查看共享资源的目的?
      

  10.   

    请问楼上,利用WnetOpenEnum、WnetEnumResource、WNetCloseEnum,这些函数实现查看共享资源,有源程序吗?我现在写一半出问题,不知道是哪的错,想找个源程序对比一下。非常感谢谢谢!
      

  11.   

    有源程序
    http://download.csdn.net/user/developCpp
      

  12.   

    to developCpp :
        这样可以实现net view吗?我也行实现一下