以前看过很多网络相关方面的程式源码, 但时间长了都忘了怎么实现的了, 因此,想将以后看过的源码实现方式记录下来, 以免下次再得找资源!
其实端口扫描程式的原理很简单, 利用socket连接指定IP的端口, 根据其返回值就可以得知目标机器是否开启了这个端口,
实现步骤如下:
1. 创建socket
c_socket = socket ( AF_INET, SOCK_STREAM, 0 );
if ( c_socket == SOCKET_ERROR )
{
printf (" create socket fault!/n ");
return -1;
}
2. 连接目示机器
struct sockaddr_in remoteaddr;
struct hostent* remotehost;
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr = inet_addr ( Address );
remoteaddr.sin_port = htons ( cPort );
//连接
if ( connect ( c_socket, (SOCKADDR*) &remoteaddr, sizeof ( struct sockaddr_in ) ) == SOCKET_ERROR )
{
printf ("< %3d > connect port %5d .../n",ThreadID,cPort ) ;
closesocket( c_socket);
return -1;
}
closesocket( c_socket);
printf ("< %3d > connect port %5d succeed/n",ThreadID,cPort ) ;
也可以利用多线程技术实现, 只要给每个线程分配好指定的扫描端口段就可以了

本文介绍了端口扫描程序的实现原理,通过创建socket,连接目标IP的特定端口,根据连接返回值判断端口是否开放。文中还提及了使用多线程技术进行端口段的扫描,为每个线程分配不同的扫描任务。
最低0.47元/天 解锁文章
1915

被折叠的 条评论
为什么被折叠?



