首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用什么库来创建一个简单的端口扫描器?

使用什么库来创建一个简单的端口扫描器?
EN

Stack Overflow用户
提问于 2013-11-12 09:42:03
回答 3查看 3.3K关注 0票数 3

我需要建议建立一个简单的端口扫描器,谁将需要检测一些特定的设备是否连接到网络从他们的IP/MAC地址。

我正在windows 7上工作,最好使用C++ Builder 2010,或者java或Qt。

由于我的软件是一种专有软件,图书馆必须处于公共领域或同等领域。

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

如何使用Indy套接字或Synapse TCP/IP库?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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(),并让它直接告诉您是否成功/失败。

票数 7
EN

Stack Overflow用户

发布于 2013-11-12 10:16:14

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

高级方法基于指纹和prob数据包,您可以了解nmap如何检测打开的端口。

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

票数 2
EN

Stack Overflow用户

发布于 2013-11-12 12:57:14

为Borland C++建筑公司?对不起,对于Borland C++构建器来说没有太多,但是如果您可以使用和WINSOCK库,那么它就像下面这样简单:

Winsock端口扫描器:

代码语言:javascript
复制
#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");
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19925675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档