用什么库来创建简单的端口扫描程序?

时间:2013-11-12 09:42:04

标签: c++ c++builder tcp-ip

我需要建议创建一个简单的端口扫描器,他需要检测某些特定设备是否通过其IP / MAC地址连接到网络。

我正在使用Windows 7,最好使用C ++ Builder 2010,或java或Qt。

图书馆必须属于公共领域或同等学历,因为我的软件是专有软件。

你会建议哪个图书馆?你知道我可以从哪个免费软件或任何例子开始?

如何使用Indy Sockets或Synapse TCP / IP库?

3 个答案:

答案 0 :(得分:4)

任何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()并让它直接告诉您它成功/失败。

答案 1 :(得分:1)

开放端口是一个在其上有监听应用程序的端口。检查TCP端口的最简单方法是尝试连接它,如果建立连接,则该端口打开。

高级方法基于指纹识别和prob数据包,您可以阅读nmap检测开放端口的方式。

最后,pcap是高级网络编程的有用库。

答案 2 :(得分:0)

对于Borland C ++构建器?对不起,Borland C ++ builder的用户不多,  但如果您可以使用Visual C ++ Express和WINSOCK库,那么它就像这样简单:

Winsock portscanner:

#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");
   }
}