找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4107|回复: 1

探测远程主机的NetBIOS信息

[复制链接]
发表于 2008-9-21 15:20:58 | 显示全部楼层 |阅读模式
可探测远程主机的NetBIOS信息,包括操作系统指纹,共享目录,用户与组,传输列表及其他信息。您可以在中华安全网(SafeChina)下载此软件。

    大家一提到Windows2000/XP系统的安全性,很快就会想到NULL Session(空会话)。这可以算是微软安置的一个后门,很多简单而容易的攻击都是基于空会话而实现的。在此,我们不讨论如何攻陷一台Windows2000/XP系统,而是要谈谈在建立空会话之后,我们可以得到远程主机的哪些NetBIOS信息。(由于本文是针对Windows2000/XP系统,所以使用了UNICODE编码)。

一)NetBIOS信息  
    在我们和远程Windows2000/XP主机建立了空会话之后,我们就有权枚举系统里的各项NetBIOS信息了。当然在某些选项中需要较高的权利,不过我们只执行那些匿名用户可以获得的绝大多数系统信息。

    时间:探测远程主机的当前日期和时间信息。它会返回一个数据结构,包括年,月,日,星期,时,分,秒等等。不过得到的是GMT标准时间,当然对于我们来说就应该换算为GMT+8:00了。由此可以判断出主机所在的时区信息。

    操作系统指纹:探测远程主机的操作系统指纹信息。一共有三种级别的探测(100,101,102),我们使用的是101级,它会返回一个数据结构,可以获取远程主机的平台标识,服务器名称,操作系统的主次版本(Windows2000为5.0,WindowsXP为5.1,而最新操作系统Longhorn的版本为6.0),服务器类型(每台主机可能同时包含多种类型信息)和注释。

    共享列表:探测远程主机的共享列表。我们可以获得一个数据结构指针,枚举远程主机的所有共享信息(隐藏的共享列表在内)。其中包括共享名称,类型与备注。类型可分为:磁盘驱动器,打印队列,通讯设备,进程间通讯与特殊设备。

    用户列表: 探测远程主机的用户列表,返回一个数据结构指针,枚举所有用户信息。可获取用户名,全名,用户标识符,说明与标识信息。标识信息可以探测用户的访问权限。

    本地组列表: 探测远程主机的本地组列表信息。枚举所有本地组信息,包含本地组名称和注释信息。

    组列表: 探测远程主机的组列表信息。枚举所有的组信息,包括组名称,注释,组标识符与属性。在此基础上,我们可以枚举组内的所有用户信息。

    组用户列表: 探测特定组内的用户信息。我们可以获得组内所有用户的名称。当我门获得了所有的用户列表,下一步就应该很清楚了,那就是挂一个字典进行破解了。

    传输协议列表: 探测远程主机的传输协议信息,枚举所有的传输列表。可以获得每个传输协议的名称,地址,网络地址和当前与本传输协议连接的用户数目。

    会话列表: 探测远程主机的当前会话列表。枚举每个会话的相关信息,包括客户端主机的名称,当前用户的名称,活动时间和空闲时间。这可以帮助我们了解远程主机用户的喜好等等。

二)主要函数与相关数据结构分析
    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);
     //释放由系统分配的内存空间。

三) 如何防止NetBIOS信息的泄露
    我们可以安装防火墙来禁止空会话的建立,或者我们可以在网络连接属性里禁用TCP/IP上的NetBIOS,当然也可以在IP安全策略里禁用445/tcp端口来实现。只要空会话不能成功建立,那就很难获得上面提到的各项信息了。

四) 源代码
  1. #define  UNICODE
  2. #define  _UNICODE
  3. #include <windows.h>
  4. #include <winnetwk.h>
  5. #include <tchar.h>
  6. #include <lm.h>
  7. #pragma  comment (lib,"mpr")
  8. #pragma  comment (lib,"netapi32")
  9. void start();
  10. void usage();
  11. int  datetime(PTSTR server);
  12. int  fingerprint(PTSTR server);
  13. int  netbios(PTSTR server);
  14. int  users(PTSTR server);
  15. int  localgroup(PTSTR server);
  16. int  globalgroup(PTSTR server);
  17. int  transport(PTSTR server);
  18. int  session(PTSTR server);
  19. int wmain(int argc,TCHAR *argv[])
  20. {
  21.     NETRESOURCE nr;
  22.     DWORD       ret;
  23.     TCHAR       username[100]=_T("");
  24.     TCHAR       password[100]=_T("");
  25.     TCHAR       ipc[100]=_T("");
  26.     system("cls.exe");
  27.     start();
  28.     if(argc!=2)
  29.     {
  30.         usage();
  31.         return -1;
  32.     }
  33.     swprintf(ipc,_T("\\\\%s\\ipc$"),argv[1]);
  34.     nr.lpLocalName=NULL;
  35.     nr.lpProvider=NULL;
  36.     nr.dwType=RESOURCETYPE_ANY;
  37.     nr.lpRemoteName=ipc;
  38.     ret=WNetAddConnection2(&nr,username,password,0);
  39.     if(ret!=ERROR_SUCCESS)
  40.     {
  41.         _tprintf(_T("\nIPC$ Connect Failed.\n"));
  42.         return -1;
  43.     }
  44.        datetime(argv[1]);
  45.          fingerprint(argv[1]);
  46.        netbios(argv[1]);
  47.        users(argv[1]);
  48.        localgroup(argv[1]);
  49.        globalgroup(argv[1]);
  50.        transport(argv[1]);
  51.        session(argv[1]);
  52.     ret=WNetCancelConnection2(ipc,0,TRUE);   
  53.     if(ret!=ERROR_SUCCESS)
  54.     {
  55.         _tprintf(_T("IPC$ Disconnect Failed.\n"));
  56.         return -1;
  57.     }
  58.     return 0;
  59. }
  60. void start()
  61. {
  62.     _tprintf(_T("=====[ T-SMB Scan, by TOo2y        ]=====\n"));
  63.     _tprintf(_T("=====[ E-mail: TOo2y@safechina.net ]=====\n"));
  64.     _tprintf(_T("=====[ HomePage: http://www.safechina.net/ ]=====\n"));
  65.     _tprintf(_T("=====[ Date: 12-12-2002            ]=====\n"));
  66. }
  67. void usage()
  68. {
  69.     _tprintf(_T("\nUsage:\t  T-SMB  RemoteIP"));
  70. }
  71. int datetime(PTSTR server)
  72. {
  73.     PTIME_OF_DAY_INFO  pBuf=NULL;
  74.     NET_API_STATUS     nStatus;
  75.     DWORD              lerror;
  76.     _tprintf(_T("\n*** Date and Time ***\n"));
  77.     nStatus=NetRemoteTOD(server,(PBYTE*)&pBuf);
  78.     if(nStatus==NERR_Success)
  79.     {
  80.         if(pBuf!=NULL)
  81.         {
  82.             _tprintf(_T("\nCurrent date:\t%.2d-%.2d-%d"),pBuf->tod_month,pBuf->tod_day,pBuf->tod_year);
  83.             _tprintf(_T("\nCurrent time:\t%.2d:%.2d:%.2d.%.2d (GMT)"),pBuf->tod_hours,pBuf->tod_mins,pBuf->tod_secs,pBuf->tod_hunds);
  84.             pBuf->tod_hours=(pBuf->tod_hours+8)%24;
  85.             _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);
  86.         }   
  87.     }
  88.     else
  89.     {
  90.         lerror=GetLastError();
  91.         if(lerror==997)
  92.         {
  93.             _tprintf(_T("\nDateTime:\tOverlapped I/O operation is in progress. \n"));
  94.         }
  95.         else                           
  96.         {
  97.                    _tprintf(_T("\nDatetime Error:\t%d\n"),lerror);
  98.         }
  99.     }
  100.     if(pBuf!=NULL)
  101.     {
  102.         NetApiBufferFree(pBuf);
  103.     }
  104.     return 0;
  105. }
  106. int fingerprint(PTSTR server)  
  107. {
  108.          DWORD              dwlength;
  109.     DWORD              dwLevel;
  110.     NET_API_STATUS     nStatus;
  111.     PSERVER_INFO_101   pBuf;
  112.     DWORD              lerror;
  113.     dwLevel=101;
  114.     pBuf=NULL;
  115.     dwlength=_tcslen(server);
  116.     _tprintf(_T("\n**** Fingerprint ****\n"));
  117.     nStatus=NetServerGetInfo(server,dwLevel,(PBYTE *)&pBuf);
  118.     if(nStatus==NERR_Success)
  119.     {
  120.         _tprintf(_T("\nComputername:\t%s"),pBuf->sv101_name);
  121.         _tprintf(_T("\nComment:\t%s"),pBuf->sv101_comment);
  122.         _tprintf(_T("\nPlatform:\t%d"),pBuf->sv101_platform_id);
  123.         _tprintf(_T("\nVersion:\t%d.%d"),pBuf->sv101_version_major,pBuf->sv101_version_minor);
  124.         _tprintf(_T("\nType:"));
  125.         if(pBuf->sv101_type & SV_TYPE_NOVELL)
  126.         {
  127.             _tprintf(_T("\t\tNovell server.\n"));
  128.         }
  129.         if(pBuf->sv101_type & SV_TYPE_XENIX_SERVER)
  130.         {
  131.             _tprintf(_T("\t\tXenix server.\n"));
  132.         }
  133.         if(pBuf->sv101_type & SV_TYPE_DOMAIN_ENUM)
  134.         {
  135.             _tprintf(_T("\t\tPrimary domain .\n"));
  136.         }
  137.         if(pBuf->sv101_type & SV_TYPE_TERMINALSERVER)
  138.         {
  139.             _tprintf(_T("\t\tTerminal Server.\n"));
  140.         }
  141.         if(pBuf->sv101_type & SV_TYPE_WINDOWS)
  142.         {
  143.             _tprintf(_T("\t\tWindows 95 or later.\n"));
  144.         }
  145.         if(pBuf->sv101_type & SV_TYPE_SERVER)
  146.         {
  147.             _tprintf(_T("\t\tA LAN Manager server.\n"));
  148.         }
  149.                   if(pBuf->sv101_type & SV_TYPE_WORKSTATION)      
  150.         {
  151.                           _tprintf(_T("\t\tA LAN Manager workstation.\n"));
  152.          }
  153.         if(pBuf->sv101_type & SV_TYPE_PRINTQ_SERVER)
  154.         {
  155.             _tprintf(_T("\t\tServer sharing print queue.\n"));
  156.         }
  157.         if(pBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)
  158.         {
  159.             _tprintf(_T("\t\tPrimary domain controller.\n"));
  160.         }
  161.         if(pBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
  162.         {
  163.             _tprintf(_T("\t\tBackup domain controller.\n"));
  164.         }
  165.         if(pBuf->sv101_type & SV_TYPE_AFP)
  166.         {
  167.             _tprintf(_T("\t\tApple File Protocol server.\n"));
  168.         }
  169.         if(pBuf->sv101_type & SV_TYPE_DOMAIN_MEMBER)
  170.         {
  171.             _tprintf(_T("\t\tLAN Manager 2.x domain member.\n"));
  172.         }
  173.         if(pBuf->sv101_type & SV_TYPE_LOCAL_LIST_ONLY)
  174.         {
  175.             _tprintf(_T("\t\tServers maintained by the browser.\n"));
  176.         }
  177.         if(pBuf->sv101_type & SV_TYPE_DIALIN_SERVER)
  178.         {
  179.             _tprintf(_T("\t\tServer running dial-in service.\n"));
  180.         }
  181.         if(pBuf->sv101_type & SV_TYPE_TIME_SOURCE)
  182.         {
  183.             _tprintf(_T("\t\tServer running the Timesource service.\n"));
  184.         }
  185.         if(pBuf->sv101_type & SV_TYPE_SERVER_MFPN)
  186.         {
  187.             _tprintf(_T("\t\tMicrosoft File and Print for NetWare.\n"));
  188.         }
  189.         if(pBuf->sv101_type & SV_TYPE_NT)
  190.         {
  191.             _tprintf(_T("\t\tWindows NT/2000/XP workstation or server.\n"));
  192.         }
  193.         if(pBuf->sv101_type & SV_TYPE_WFW)
  194.         {
  195.             _tprintf(_T("\t\tServer running Windows for Workgroups.\n"));
  196.         }
  197.         if(pBuf->sv101_type & SV_TYPE_POTENTIAL_BROWSER)
  198.         {
  199.             _tprintf(_T("\t\tServer that can run the browser service.\n"));
  200.         }
  201.         if(pBuf->sv101_type & SV_TYPE_BACKUP_BROWSER)
  202.         {
  203.             _tprintf(_T("\t\tServer running a browser service as backup.\n"));
  204.         }
  205.         if(pBuf->sv101_type & SV_TYPE_MASTER_BROWSER)
  206.         {
  207.             _tprintf(_T("\t\tServer running the master browser service.\n"));
  208.         }
  209.         if(pBuf->sv101_type & SV_TYPE_DOMAIN_MASTER)
  210.         {
  211.             _tprintf(_T("\t\tServer running the domain master browser.\n"));
  212.         }
  213.         if(pBuf->sv101_type & SV_TYPE_CLUSTER_NT)
  214.         {
  215.             _tprintf(_T("\t\tServer clusters available in the domain.\n"));
  216.         }
  217.         if(pBuf->sv101_type & SV_TYPE_SQLSERVER)
  218.         {
  219.             _tprintf(_T("\t\tAny server running with Microsoft SQL Server.\n"));
  220.         }
  221.         if(pBuf->sv101_type & SV_TYPE_SERVER_NT)
  222.         {
  223.             _tprintf(_T("\t\tWindows NT/2000 server that is not a domain controller.\n"));
  224.         }
  225.     }
  226.     else
  227.     {
  228.         lerror=GetLastError();
  229.         if(lerror==997)
  230.         {
  231.             _tprintf(_T("\nFingerprint:\tOverlapped I/O operation is in progress.\n"));
  232.         }
  233.         else
  234.         {
  235.                         _tprintf(_T("\nFingerprint Error:\t%d\n"),lerror);
  236.         }
  237.     }
  238.     if(pBuf!=NULL)
  239.     {
  240.         NetApiBufferFree(pBuf);
  241.     }
  242.     return 0;
  243. }
  244. int netbios(PTSTR server)      
  245. {
  246.     DWORD              er,tr,resume;
  247.     DWORD              i,dwLength,dwLevel;
  248.     PSHARE_INFO_1      pBuf,pBuffer;
  249.     NET_API_STATUS     nStatus;
  250.     DWORD              lerror;
  251.     er=0;            
  252.     tr=0;
  253.     resume=0;
  254.     dwLevel=1;
  255.     dwLength=_tcslen(server);
  256.          _tprintf(_T("\n****** Netbios ******\n"));
  257.     do
  258.     {                                                
  259.         nStatus=NetShareEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
  260.         if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA))
  261.         {
  262.                        pBuffer=pBuf;
  263.                   for(i=1;i<=er;i++)  
  264.             {
  265.                 _tprintf(_T("\nName:\t\t%s"),pBuffer->shi1_netname);
  266.                 _tprintf(_T("\nRemark:\t\t%s"),pBuffer->shi1_remark);
  267.                 _tprintf(_T("\nType:\t\t"));
  268.                 if(pBuffer->shi1_type==STYPE_DISKTREE)     
  269.                 {
  270.                     _tprintf(_T("Disk drive.\n"));
  271.                 }
  272.                 else if(pBuffer->shi1_type==STYPE_PRINTQ)  
  273.                 {
  274.                     _tprintf(_T("Print queue.\n"));
  275.                 }
  276.                 else if(pBuffer->shi1_type==STYPE_DEVICE)
  277.                 {
  278.                     _tprintf(_T("Communication device.\n"));
  279.                 }
  280.                 else if(pBuffer->shi1_type==STYPE_IPC)   
  281.                 {
  282.                     _tprintf(_T("Interprocess communication (IPC).\n"));  
  283.                 }
  284.                 else if(pBuffer->shi1_type==STYPE_SPECIAL)
  285.                 {
  286.                     _tprintf(_T("Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$).\n"));
  287.                 }
  288.                 else
  289.                 {
  290.                     _tprintf(_T("\n"));
  291.                 }
  292.                 pBuffer++;
  293.             }
  294.         }
  295.         else
  296.         {
  297.             lerror=GetLastError();
  298.             if(lerror==997)
  299.             {
  300.                 _tprintf(_T("\nNetbios:\tOverlapped I/O operation is in progress.\n"));
  301.             }
  302.             else
  303.             {
  304.                 _tprintf(_T("\nNetbios Error:\t%d\n"),lerror);
  305.             }
  306.         }
  307.               if(pBuf!=NULL)
  308.         {
  309.                    NetApiBufferFree(pBuf);
  310.         }
  311.     }
  312.     while(nStatus==ERROR_MORE_DATA);
  313.     return 0;
  314. }
  315. int users(PTSTR server)
  316. {
  317.     PNET_DISPLAY_USER  pBuf,pBuffer;
  318.     DWORD              nStatus;
  319.     DWORD              dwRec;
  320.     DWORD              i=0;
  321.     DWORD              lerror;
  322.     DWORD              dwLevel;
  323.     dwLevel=1;
  324.     _tprintf(_T("\n******* Users *******\n"));
  325.     do
  326.     {
  327.         nStatus=NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf);
  328.         if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA))
  329.         {
  330.             pBuffer=pBuf;
  331.             for(;dwRec>0;dwRec--)
  332.             {
  333.                 _tprintf(_T("\nName:\t\t%s"),pBuffer->usri1_name);
  334.                 _tprintf(_T("\nFull Name:\t%s"),pBuffer->usri1_full_name);
  335.                 _tprintf(_T("\nUser ID:\t%u"),pBuffer->usri1_user_id);
  336.                 _tprintf(_T("\nComment: \t%s"),pBuffer->usri1_comment);
  337.                 _tprintf(_T("\nFlag:"));  
  338.                 if(pBuffer->usri1_flags & UF_ACCOUNTDISABLE)
  339.                 {
  340.                     _tprintf(_T("\t\tThe user's account is disabled.\n"));
  341.                 }
  342.                 if(pBuffer->usri1_flags & UF_TRUSTED_FOR_DELEGATION)
  343.                 {
  344.                     _tprintf(_T("\t\tThe account is enabled for delegation. \n"));
  345.                 }
  346.                 if(pBuffer->usri1_flags & UF_LOCKOUT)
  347.                 {
  348.                     _tprintf(_T("\t\tThe account is currently locked out (blocked).\n"));
  349.                 }
  350.                 if(pBuffer->usri1_flags & UF_SMARTCARD_REQUIRED)
  351.                 {
  352.                     _tprintf(_T("\t\tRequires the user to log on to the user account with a smart card. \n"));
  353.                 }
  354.                 if(pBuffer->usri1_flags & UF_DONT_REQUIRE_PREAUTH)
  355.                 {
  356.                     _tprintf(_T("\t\tThis account does not require Kerberos preauthentication for logon.\n"));
  357.                 }
  358.                 if(pBuffer->usri1_flags & UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED)
  359.                 {
  360.                     _tprintf(_T("\t\tThe user's password is stored under reversible encryption in the Active Directory. \n"));
  361.                 }
  362.                 if(pBuffer->usri1_flags & UF_NOT_DELEGATED)
  363.                 {
  364.                     _tprintf(_T("\t\tMarks the account as "sensitive"; other users cannot act as delegates of this user account.\n"));
  365.                 }
  366.                 if(pBuffer->usri1_flags & UF_USE_DES_KEY_ONLY)
  367.                 {
  368.                     _tprintf(_T("\t\tRestrict this principal to use only Data Encryption Standard (DES) encryption types for keys.\n"));
  369.                 }
  370.                 if(pBuffer->usri1_flags & UF_HOMEDIR_REQUIRED)
  371.                 {
  372.                     _tprintf(_T("\t\tThe home directory is required. Windows NT/Windows 2000/Windows XP ignores this value.\n"));
  373.                 }
  374.                 if(pBuffer->usri1_flags & UF_SCRIPT)
  375.                 {
  376.                     _tprintf(_T("\t\tThe logon script executed. This value must be set for LAN Manager 2.0 and Windows NT/2000/XP.\n"));
  377.                 }
  378.                 i=pBuffer->usri1_next_index;
  379.                 pBuffer++;
  380.             }
  381.         }
  382.         else
  383.         {  
  384.             lerror=GetLastError();
  385.             if(lerror==997)
  386.             {
  387.                 _tprintf(_T("\nUsers:\t\tOverlapped I/O operation is in progress.\n"));
  388.             }
  389.             else
  390.             {
  391.                 _tprintf(_T("\nUsers Error:\t%d\n"),lerror);
  392.             }
  393.         }
  394.           if(pBuf!=NULL)
  395.         {
  396.                         NetApiBufferFree(pBuf);
  397.         }
  398.     }while(nStatus==ERROR_MORE_DATA);
  399.     return 0;
  400. }
  401. int localgroup(PTSTR server)  
  402. {
  403.     NET_API_STATUS      nStatus;
  404.     PLOCALGROUP_INFO_1  pBuf,pBuffer;
  405.     DWORD               i,dwLevel;
  406.          DWORD               er,tr,resume;
  407.     DWORD               lerror;
  408.     resume=0;
  409.     dwLevel=1;
  410.     _tprintf(_T("\n**** Local Group ****\n"));
  411.     do
  412.     {                                                   
  413.         nStatus=NetLocalGroupEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
  414.         if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA))
  415.         {
  416.             pBuffer=pBuf;
  417.             for(i=1;i<=er;i++)
  418.             {
  419.                 _tprintf(_T("\nName:\t\t%s"),pBuffer->lgrpi1_name);
  420.                 _tprintf(_T("\nComment:\t%s"),pBuffer->lgrpi1_comment);
  421.                 _tprintf(_T("\n"));
  422.                 pBuffer++;
  423.             }
  424.         }
  425.         else
  426.         {
  427.             lerror=GetLastError();
  428.             if(lerror==997)
  429.             {
  430.                 _tprintf(_T("\nLocal Group:\tOverlapped I/O operation is in progress.\n"));
  431.             }
  432.             else
  433.             {
  434.                 _tprintf(_T("\nLocal Group Error:\t%d\n"),lerror);
  435.             }
  436.         }
  437.         if(pBuf!=NULL)
  438.         {
  439.               NetApiBufferFree(pBuf);
  440.         }
  441.     }while(nStatus==ERROR_MORE_DATA);
  442.     return 0;
  443. }
  444. int globalgroup(PTSTR server)  
  445. {
  446.     PNET_DISPLAY_GROUP   pGBuf,pGBuffer;
  447.     PGROUP_USERS_INFO_0  pUBuf,pUBuffer;
  448.     DWORD                nGStatus,nUStatus;
  449.     DWORD                i;
  450.     DWORD                dwLevel,dwRec;
  451.     DWORD                k;
  452.     DWORD                er,tr,resume;
  453.     DWORD                lerror;
  454.    
  455.     i=0;
  456.     er=0;
  457.     tr=0;
  458.     resume=0;
  459.     dwLevel=3;
  460.     _tprintf(_T("\n**** Global group ****\n"));
  461.          do
  462.     {
  463.         nGStatus=NetQueryDisplayInformation(server,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID*)&pGBuf);
  464.             if((nGStatus==ERROR_SUCCESS) || (nGStatus==ERROR_MORE_DATA))
  465.         {
  466.             pGBuffer=pGBuf;
  467.             for(;dwRec>0;dwRec--)
  468.             {
  469.                 _tprintf(_T("\nName:\t\t%s"),pGBuffer->grpi3_name);
  470.                      _tprintf(_T("\nComment:\t%s"),pGBuffer->grpi3_comment);
  471.                           _tprintf(_T("\nGroup ID:\t%u"),pGBuffer->grpi3_group_id);
  472.                                   _tprintf(_T("\nAttributs:\t%u"),pGBuffer->grpi3_attributes);
  473.                 _tprintf(_T("\nMembers:\t"));
  474.                            nUStatus=NetGroupGetUsers(server,pGBuffer->grpi3_name,0,(PBYTE *)&pUBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
  475.                 if(nUStatus==NERR_Success)
  476.                 {
  477.                     pUBuffer=pUBuf;
  478.                     for(k=1;k<=er;k++)
  479.                     {
  480.                         _tprintf(_T("%s  "),pUBuffer->grui0_name);
  481.                                          pUBuffer++;
  482.                     }
  483.                                      if(pUBuf!=NULL)
  484.                     {
  485.                                   NetApiBufferFree(pUBuf);
  486.                     }
  487.                 }
  488.                 _tprintf(_T("\n"));
  489.                 i=pGBuffer->grpi3_next_index;
  490.                 pGBuffer++;
  491.             }
  492.         }
  493.         else
  494.         {
  495.             lerror=GetLastError();
  496.             if(lerror==997)
  497.             {
  498.                 _tprintf(_T("\nGlobal Group:\tOverlapped I/O operation is in progress.\n"));
  499.             }
  500.             else
  501.             {
  502.                 _tprintf(_T("\nGlobal Group Error:\t%d\n"),lerror);
  503.             }
  504.         }
  505.         if(pGBuf!=NULL)
  506.         {
  507.                       NetApiBufferFree(pGBuf);
  508.         }
  509.     }while(nGStatus==ERROR_MORE_DATA);
  510.          return 0;
  511. }
  512. int transport(PTSTR server)  
  513. {
  514.     NET_API_STATUS           nStatus;
  515.     PSERVER_TRANSPORT_INFO_0 pBuf,pBuffer;
  516.     DWORD                    dwLevel;
  517.     DWORD                    i;
  518.          DWORD                    er,tr,resume;
  519.          DWORD                    dwTotalCount;
  520.     DWORD                    dwLength;
  521.     DWORD                    lerror;
  522.          er=0;
  523.     tr=0;
  524.     resume=0;
  525.     dwLevel=0;
  526.     dwTotalCount=0;
  527.     _tprintf(_T("\n***** Transport *****\n"));
  528.     dwLength=_tcslen(server);
  529.     do
  530.     {
  531.         nStatus=NetServerTransportEnum(server,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
  532.         if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA))
  533.         {
  534.                            pBuffer=pBuf;
  535.             for(i=0;i<er;i++)
  536.             {
  537.                           _tprintf(_T("\nTransport:\t%s"),pBuffer->svti0_transportname);
  538.                 _tprintf(_T("\nNetworkAddr:\t%s"),pBuffer->svti0_networkaddress);
  539.                 _tprintf(_T("\nActiveClient:\t%d User(s)\n"),pBuffer->svti0_numberofvcs);
  540.                               pBuffer++;
  541.                                  dwTotalCount++;
  542.             }
  543.         }
  544.         else
  545.         {
  546.             lerror=GetLastError();
  547.             if(lerror==997)
  548.             {
  549.                 _tprintf(_T("\nTransport:\tOverlapped I/O operation is in progress.\n"));
  550.             }
  551.             else
  552.             {
  553.                 _tprintf(_T("\nTransport Error:\t%d\n"),lerror);
  554.             }
  555.         }
  556.              if(pBuf!=NULL)
  557.         {
  558.                             NetApiBufferFree(pBuf);
  559.         }
  560.     }while(nStatus==ERROR_MORE_DATA);
  561.     _tprintf(_T("\nTotal of %d entrie(s) enumerated.\n"),dwTotalCount);
  562.     return 0;
  563. }
  564.    
  565. int session(PTSTR server)   
  566. {
  567.     PSESSION_INFO_10   pBuf,pBuffer;
  568.     NET_API_STATUS     nStatus;
  569.     DWORD              i,dwLevel;
  570.     DWORD              er,tr,resume;
  571.     DWORD              dwTotalCount;
  572.     DWORD              dwLength;
  573.     PTSTR              pszClient;
  574.     PTSTR              pszUser;
  575.     DWORD              lerror;
  576.     _tprintf(_T("\n****** Session ******\n"));
  577.     dwLevel=10;
  578.     dwTotalCount=0;
  579.     pszClient=NULL;
  580.     pszUser=NULL;
  581.     er=0;
  582.     tr=0;
  583.     resume=0;
  584.     dwLength=_tcslen(server);
  585.     do
  586.     {
  587.         nStatus=NetSessionEnum(server,pszClient,pszUser,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume);
  588.         if((nStatus==NERR_Success) || (nStatus==ERROR_MORE_DATA))
  589.         {
  590.             pBuffer=pBuf;
  591.             for(i=0;i<er;i++)
  592.             {
  593.                 if(pBuffer==NULL)
  594.                 {
  595.                     _tprintf(_T("An access violation has occurred.\n"));
  596.                     break;
  597.                 }
  598.                 _tprintf(_T("\nClient:\t\t%s"),pBuffer->sesi10_cname);
  599.                 _tprintf(_T("\nUser:\t\t%s"),pBuffer->sesi10_username);
  600.                 _tprintf(_T("\nSeconds Active:\t%d"),pBuffer->sesi10_time);
  601.                 _tprintf(_T("\nSeconds Idle:\t%d\n"),pBuffer->sesi10_idle_time);
  602.                 pBuffer++;
  603.                 dwTotalCount++;
  604.             }
  605.         }
  606.         else
  607.         {
  608.             lerror=GetLastError();
  609.             if(lerror==997)
  610.             {
  611.                 _tprintf(_T("\nSession:\tOverlapped I/O operation is in progress.\n"));
  612.             }
  613.             else
  614.             {
  615.                 _tprintf(_T("\nSession Error:\t%d\n"),lerror);
  616.             }
  617.         }
  618.         if(pBuf!=NULL)
  619.         {
  620.             NetApiBufferFree(pBuf);
  621.         }
  622.     }while(nStatus==ERROR_MORE_DATA);
  623.        _tprintf(_T("\nTotal of %d entrie(s) enumerated.\n"),dwTotalCount);
  624.     return 0;
  625. }
复制代码
发表于 2009-3-30 15:56:33 | 显示全部楼层

出错,我编译了程序,但运行时出错,错误号是5

出错,我编译了程序,但运行时出错,错误号是5
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 21:33 , Processed in 0.022651 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表