端口扫描实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.实验具体实现方案:编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。基本工作过程如下:
(1)设定好一定的端口扫描范围;
(2)设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;
(3)创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口;
故可设计132~139检测数据。
IP地址如下:127.0.0.1.
输入数据,扫描即可开始:
扫描结果如下:
显示了wk.baidu.com开始扫描到结束扫描的结果。
分析:127.0.0.1为是回送地址,指本地机。
只有135端口是打开的。
四、参考文献
[1] 肖微.《端口扫描技术的原理及应用》.网络安全技术与应用.2006.10.
3)套接字可以理解为通信连接的一端,其主要包括协议、主机IP地址和端口号。
4)将两个套接字连接到一起便可以在不同应用进程之间传递数据
5)套接字实现了对网络和传输层协议的封装,为应用进程之间的通信连接的建立、数据传输等通信过程提供了编程界面。
4.2套接字编程的具体地位
4.3面向连接的客户机/服务器程序工作模型:
2.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。
3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。
4.学生要求人数:1人。
二、综合实验正文
综合实验报告
( 2010-- 2011年度第二学期)
名称:网络综合实验
题目:端口扫描程序
院系:信息工程系
班级:
学号:
学生姓名:
指导教师:鲁斌李莉王晓霞张铭泉
设计周数:2周
成绩:
日期:2011年7月1日
一、综合实验的目的与要求
1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。
struct sockaddr_in sin; //sockaddr_in结构,表示socket address and internet style
uint BeginPort; //开始端口
uint EndPort; //结束端口
uint CurrentPort; //正在扫描的端口
uint i=0;
cout<<"Input the End port:";
cin>>EndPort;
}
if(WSAStartup(wsVersion,&wsaData))
{
cout<<"Initial Failed!"<<endl; return -1;
}
cout<<endl<<"Now Scan "<<HostName<<"'s Specified Ports Status."<<endl<<endl;
[2] 刘咏.《网络安全性能测试平台之端口扫描研究及实现》.四川大学工程硕士学位论文.2005.11.
附录
#include <winsock2.h>
#include <windef.h>
#include <iostream>
#include <vector>
#pragma comment(lib,"ws2_32.lib")
本次实验所用到的知识仅仅是上图所示的一部分,先是建立socket,然后connect连接。
5.实验流程图:
三、综合实验总结或结论
1)本机多端口的扫描,单IP的扫描:
首先获得本机已经打开的端口号,在Windows + R->cmd->netstat -na->enter得到具体端口信息如下:
有端口135、445、6001等端口是处于打开状态,
//循环判断范围内的端口,以判断端口是否开放,并记录结果
for(CurrentPort=BeginPort; CurrentPort<=EndPort;++CurrentPort)
{
s = socket(AF_INET,SOCK_STREAM,0); //s用来记录socket的返回值。
if(s == INVALID_SOCKET)
}
else
{
cout<<"Port: "<<CurrentPort<<", Status: Opened."<<endl;
OpenPort ++;
v.push_back(CurrentPort);//用于数值的自动增加vector(uint)v
closesocket(s);
}
}
cout<<endl<<"Resaults: Host "<<HostName<<" has opened "<<OpenPort<<" port.Opened port as follow:"<<endl;
(4)如果返回false,表示端口没有开放,否则端口开放。
4.有关TCP/IP的知识:
4.1套接字概念
1)在网络中要全局地标识一个参与通信的进程,需要采用三元组:协议、主机IP地址、端口号。
2)要描述两个应用进程之间的端到端的通信关联则需要一个五元组:协议、信源机IP地址、信源应用进程端口、信宿机IP地址、信宿应用进程端口。
cout<<"Please input the HostName:";
cin>>HostName;
cout<<"Input theBeginPort:";
cin>>BeginPort;
cout<<"Input the End port:";
cin>>EndPort;
//对用户输入的端口进行判断
while((BeginPort > EndPort || BeginPort < 0 || BeginPort >65535 || EndPort <0 || EndPort >65535))
{
cout<<"Establish Socket Failed."<<endl; WSACleanup();
}
//给结构成员赋值
sin.sin_family = AF_INET;//可能是硬件地址。。
sin.sin_port = htons(CurrentPort); //当前扫描的端口号
sin.sin_addr.S_un.S_addr = inet_addr(HostName); //输入ip地址用的
}
cout<<endl;
cout<<"===================================================================="<<endl;
closesocket(s);
WSACleanup();
return 0;
}
using namespace std;
typedef unsigned int uint;
vector<uint> v;
int
main()
{
WORD wsVersion = MAKEWORD(2,0); //socket的版本
WSADATA wsaData; //这个结构被用来存储被WSAStartup函数调用后返回的Windows Sockets数据。它包含Winsock.dll执行的数据。
cout<<"===================================================================="<<endl;
for(i=0;i<v.size();++i)
{
cout<<v.at(i)<<" ";
if((i+1)%10==0)cout<<endl;
//建立连结
if(connect(s,(struct sockaddr*)&sin,sizeof(sin)) == SOCKET_ERROR)
{
cout<<"Port: "<<CurrentPort<<", Status: Not open."<<endl;
closesocket(s);//连接失败
{
cout<<"You have input some wrong paramters.Try again."<<endl;
cout<<"Please input the HostName:";
cin>>HostName;
cout<<"Input theBeginPort:";
cin>>BeginPort;
2.实验所用的端口扫描技术:端口扫描技术有TCP connect()扫描、TCP SYN扫描、TCP FIN扫描、IP段扫描等等。本次实验所用的技术是TCP connect()扫描,这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。
char HostName[256]; //要扫描的主机
SOCKET s; //保存创建socket时的返回值/////////////////////////
////////////////////创建一个套接口。#include <winsock.h> SOCKET PASCAL FAR socket( int af, int type, int protocol);
//af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式type:新套接口的类型描述。
//protocol:套接口所用的协议。如调用者不想指定,可用0。
///////该函数如果调用成功就返回新创建的套接字的描述符
int OpenPort; //开放端口个数
OpenPort = 0;
1.端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。
相关文档
最新文档