我需要建议建立一个简单的端口扫描器,谁将需要检测一些特定的设备是否连接到网络从他们的IP/MAC地址。
我正在windows 7上工作,最好使用C++ Builder 2010,或者java或Qt。
由于我的软件是一种专有软件,图书馆必须处于公共领域或同等领域。
你会建议什么图书馆?你知道什么免费软件,我可以开始,或任何例子?
如何使用Indy套接字或Synapse TCP/IP库?
发布于 2013-11-13 02:24:34
任何TCP/IP库都可以工作。Indy,ICS,Synapse,它们都将在C++Builder中正常工作。因为Indy附带了C++Builder,所以您可以从它开始,但是您当然不局限于它。
它们都在Windows上内部使用WinSock,因此您可以直接对WinSock API进行编程,而根本不使用任何库。您所需要做的就是在程序启动时调用WSAStartup()一次,然后为要检查的每个端口调用socket()和connect()。要检查多个端口,可以使用ioctlsocket()将套接字置于非阻塞模式,然后使用select()、WSAAsyncSelect()、WSAAsyncEvent()或CreateIoCompletionPort()/GetQueuedCompletionStatus()来检测connect()是否成功/失败,或者可以将套接字置于阻塞模式(默认模式),并使用工作线程调用connect(),并让它直接告诉您是否成功/失败。
发布于 2013-11-12 10:16:14
发布于 2013-11-12 12:57:14
为Borland C++建筑公司?对不起,对于Borland C++构建器来说没有太多,但是如果您可以使用和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");
}
}https://stackoverflow.com/questions/19925675
复制相似问题