如何获得所有子网中活动的SQL服务器的ip,在线等,谢谢 如何获得所有子网中活动的SQL服务器的ip,在线等,谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我现在想到的方法是:对子网活动的ip进行扫描,然后访问该ip的注册表,获取该ip是否安装了sql服务器,但是我得不到活动的~~~ tcp 1433,udp 1434我只知道这是sql安装时默认的。你可以connect1433端口试试,不过这样不保险的。gz 是connect局域网内除你本机之外的1433端口,因为装了sql server后,默认的tcp连接端口是1433! 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 vc6.0 单步调试 无法看到static变量的值,怎么解决? 请教GetEnvironmentVariable的问题 DLL中的全局变量问题 此种Link 的错误该如何解决呢? 记事本里的选中操作是怎么实现的? HID 报告描述符 给分一下组!! 要想被派生类覆盖必须加virtual关键字吗, 加了virtual关键字后不能再加static关键字吗. 请问国际化和本地化包含的内容有什么不同??? 请教:怎样读VC源码 谁提供自画 combo Box 控件的源代码 (100分) 基于WTL与COM的服务器平台 菜鸟问题: 怎么设置静态文本框为背景透明?
你可以connect1433端口试试,不过这样不保险的。gz
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