我需要建议创建一个简单的端口扫描器,它需要检测某些特定设备是否从其 IP/MAC 地址连接到网络。
我正在使用 Windows 7,最好使用 C++ Builder 2010、java 或 Qt。
该库必须属于公共领域或同等领域,因为我的软件是专有软件。
你会建议什么图书馆?你知道我可以从任何免费软件开始,或者任何例子吗?
使用 Indy 套接字或 Synapse TCP/IP 库怎么样?
我需要建议创建一个简单的端口扫描器,它需要检测某些特定设备是否从其 IP/MAC 地址连接到网络。
我正在使用 Windows 7,最好使用 C++ Builder 2010、java 或 Qt。
该库必须属于公共领域或同等领域,因为我的软件是专有软件。
你会建议什么图书馆?你知道我可以从任何免费软件开始,或者任何例子吗?
使用 Indy 套接字或 Synapse TCP/IP 库怎么样?
任何 TCP/IP 库都可以工作。Indy、ICS、Synapse,它们都可以在 C++Builder 中正常工作。由于 Indy 附带 C++Builder,您可以从它开始,但您当然不限于它。
它们都在 Windows 内部使用 WinSock,因此您可以直接对 WinSock API 进行编程,而根本不使用任何库。您需要做的就是WSAStartup()
在程序启动时调用一次,然后调用socket()
您connect()
要检查的每个端口。要检查多个端口,您可以将套接字置于非阻塞模式,ioctlsocket()
然后使用select()
、WSAAsyncSelect()
、WSAAsyncEvent()
或CreateIoCompletionPort()
/GetQueuedCompletionStatus()
来检测是否connect()
成功/失败,或者您可以将套接字置于阻塞模式(它们的默认模式)并使用 worker要调用的线程connect()
,让它直接告诉你它是否成功/失败。
对于 Borland C++ 构建器?抱歉,Borland C++ builder 的内容不多,但如果你可以使用 Visual C++ Express 和 WINSOCK 库,那么它就这么简单:
Winsock 端口扫描器:
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#pragma comment(lib,"WSOCK32.LIB")
void main()
{
WSADATA data;
SOCKET sock;
int err,i,startport,endport;
char ip[20];
struct sockaddr_in sock_addr;
FILE*fp1;
printf("ip: ");
scanf("\n%s",ip);
printf("start port: ");
scanf("%d",&startport);
printf("end port: ");
scanf("%d",&endport);
if((WSAStartup(MAKEWORD(2,0),&data)!=0))
{
printf("Error: Winsock did not init!!!\n\n");
}
else
{
for(i=startport;i<endport;i++)
{
sock=socket(AF_INET,SOCK_STREAM,0);
sock_addr.sin_family=PF_INET;
sock_addr.sin_port=htons(i);
sock_addr.sin_addr.s_addr=inet_addr(ip);
printf("Checking port %d\n",i);
err=connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr));
if(err==0)
{
printf("Port Open!!!\n\n\a");
fp1=fopen("ports.txt","a+");
fprintf(fp1,"Port is open: %d\n\n",i);
closesocket(sock);
fclose(fp1);
}
else
{
printf("Port Closed!!!\n\n");
}
}
WSACleanup();
system("ports.txt");
}
}