如何获得所有子网中活动的SQL服务器的ip,在线等,谢谢.

解决方案 »

  1.   

    我现在想到的方法是:对子网活动的ip进行扫描,然后访问该ip的注册表,获取该ip是否安装了sql服务器,但是我得不到活动的~~~
      

  2.   

    tcp 1433,udp 1434我只知道这是sql安装时默认的。
    你可以connect1433端口试试,不过这样不保险的。gz
      

  3.   

    是connect局域网内除你本机之外的1433端口,因为装了sql server后,默认的tcp连接端口是1433!
      

  4.   

    char Ip[20];
    memset(Ip,0,20);
    char  a[64],tempchar[64];  
    CString  str;  
    PSERVER_INFO_100  pBuf;  
    PSERVER_INFO_100  pTmpBuf;  
    DWORD  dwLevel  =  100;  
    DWORD  dwPrefMaxLen  =  -1;  
    DWORD  dwEntriesRead  =  0;  
    DWORD  dwTotalEntries  =  0;  
    DWORD  dwTotalCount  =  0;  
    DWORD  dwServerType  =  SV_TYPE_SQLSERVER;    
    DWORD  dwResumeHandle  =  0;  
    NET_API_STATUS  nStatus;  
    LPTSTR  pszServerName  =  NULL;  
    DWORD  i;  
    nStatus  =  NetServerEnum(NULL,  
    dwLevel,  
    (LPBYTE  *)  &pBuf,  
    dwPrefMaxLen,  
    &dwEntriesRead,  
    &dwTotalEntries,  
    dwServerType,  
    NULL,  
    &dwResumeHandle);  
    if  (1)  
    {  
    if  ((pTmpBuf  =  pBuf)  !=  NULL)  
    {  
    for  (i  =  0;  i  <  dwEntriesRead;  i++)  
    {  

    if  (pTmpBuf  ==  NULL)  
    {  
    fprintf(stderr,  "An  access  violation  has  occurred\n");  
    break;  
    }  
    int  leng  =  lstrlenW((unsigned  short*)pTmpBuf->sv100_name)*2;  
    if  (leng>0)  
    RtlMoveMemory(a,pTmpBuf->sv100_name,leng);  
    memset(tempchar,0,64);  
    WideCharToMultiByte(  0,  0,  (unsigned  short*)a,  -1,  tempchar,  leng/2,  NULL,  NULL  );  
    str+=tempchar;   struct hostent  *m_host;
    m_host = gethostbyname(tempchar); struct in_addr addr;
    memset(&addr,0,sizeof(struct in_addr)); addr.S_un.S_addr = *(DWORD *)*(m_host->h_addr_list);
    memcpy(Ip,inet_ntoa(addr),strlen(inet_ntoa(addr)));
    pTmpBuf++;  
    dwTotalCount++;  
    }  

    if  (nStatus  ==  ERROR_MORE_DATA)  
    {  
    fprintf(stderr,  "\nMore  entries  available!!!\n");  
    fprintf(stderr,  "Total  entries:  %d",  dwTotalEntries);  
    }  

    printf("\nEntries  enumerated:  %d\n",  dwTotalCount);  
    }  
    }  
    if  (pBuf  !=  NULL)  
    NetApiBufferFree(pBuf);  
    注意:Ip字段中我只是给你了一个演示,要取多少个Ip得你自己决定。声明:此代码非原创,是我在翻faq时看到的,自己只是改了一下。 感谢zxyjyzxyjy。头文件:
    #include "winsock2.h"#include "lmserver.h"
    #include "lmapibuf.h"lib:
    netapi32.lib    ws2_32.lib