原创 端口扫描程序实现原理 收藏
以前看过很多网络相关方面的程式源码, 但时间长了都忘了怎么实现的了, 因此,想将以后看过的源码实现方式记录下来, 以免下次再得找资源!
其实端口扫描程式的原理很简单, 利用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 ) ;
也可以利用多线程技术实现, 只要给每个线程分配好指定的扫描端口段就可以了
来源:
http://blog.csdn.net/study_live/archive/2009/09/28/4604673.aspx
以前看过很多网络相关方面的程式源码, 但时间长了都忘了怎么实现的了, 因此,想将以后看过的源码实现方式记录下来, 以免下次再得找资源!
其实端口扫描程式的原理很简单, 利用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 ) ;
也可以利用多线程技术实现, 只要给每个线程分配好指定的扫描端口段就可以了
来源:
http://blog.csdn.net/study_live/archive/2009/09/28/4604673.aspx
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/2854/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表