您的位置:首页 > 理论基础 > 计算机网络

网络程序之端口扫描技术

2007-03-08 12:13 369 查看
网络程序之端口扫描技术
端口扫描是是网络安全软件中所必须有的一个功能.这个功能模块其实就是探测目地方主机已开放的端口.这样能检测一些漏洞,防止一些损失.其实探测对方主机端口有时我们用dos中自带的工具就可以.

你比如:进入cmd下.输入telnet www.sina.com.cn 80这个指令后,就能看到新浪的这个80端口是不是开放了.

具体到用高级语言如何实现这一功能呢?首先我们要理解它的原理.一台机器中它的端口如果开放,我们可以认为它正在侦听到来的连接,也就是说我们可以连接到它.网络库中提供了这么一个函数.connect().用这个函数我们来个循环探测从1到65535.分析其返回值.这样就能知道对方开放了几个端口.如果我们在创建套接字时也指定是UDP,那么我们也能探测UDP端口对方开了几个.但要注意UDP这个方式有一定的漏洞.因为UDP不是面向连接的.另外在这个编程中我们最好用到多线程方式,以便于操作.

下面是代码:

#include<winsock2.h>
#include<stdio.h>
#include <iostream.h>

void main()
{
WSADATA wsaData;
SOCKET sClient;
struct sockaddr_in server;

if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("加载套接字失败/n");
return ;
}

sClient=socket(AF_INET,SOCK_STREAM,0);

if(sClient==INVALID_SOCKET)
{
printf("创建套接字失败:%d/n",WSAGetLastError());
// return ;
}

for(int iPort = 1 ;iPort <82 ; iPort ++)
{
server.sin_family=AF_INET;
server.sin_port=htons(iPort);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(sClient,(struct sockaddr *)&server,sizeof(server))==INVALID_SOCKET)
{

printf("端口没有开放%d/n",iPort);

}
else
{
printf("端口开放%d/n",iPort);
}
}
}

当然不要忘了加载ws2_32.lib这个网络库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: