使用哪个库来创建简单的端口扫描程序

What library to use to create a simple port scanner?

本文关键字:扫描 程序 简单 创建      更新时间:2023-10-16

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

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

该库必须在公共领域或同等领域下,因为我的软件是专有软件。

你会建议哪个图书馆?你知道我可以从什么自由软件开始,或者任何例子吗?

使用Indy Sockets或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()是否成功/失败,或者您可以将套接字置于阻塞模式(其默认模式)并使用工作线程调用connect()并让它直接告诉您是成功/失败。

开放端口是具有侦听应用程序的端口。检查TCP端口的最简单方法是尝试连接它,如果建立了连接,则该端口已打开。

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

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

对于博兰德C++建设者?对不起,博兰德C++建筑商没有太多, 但是如果你可以使用Visual C++ Express和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!!!nn");
   }
   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 %dn",i);
         err=connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr));
         if(err==0)
         {
            printf("Port Open!!!nna");
            fp1=fopen("ports.txt","a+");
            fprintf(fp1,"Port is open: %dnn",i);
            closesocket(sock);
            fclose(fp1);
         }
         else
         {
            printf("Port Closed!!!nn");
         }
      }
      WSACleanup();
      system("ports.txt");
   }
}