实验六:端口扫描
- 格式:doc
- 大小:60.00 KB
- 文档页数:3
网络程序设计
实验报告
实验六:端口扫描
实验类型:验证
指导教师:
专业班级:
姓名:
学号:
电子邮件:
实验地点:
实验日期:
实验成绩:__________________________
一、实验目的
了解端口扫描的基本概念和工作原理;
二、实验设计
对串进行分割,利用Cstring的find()left()right()函数进行串分割。
得到输入的IP和首末端口。
创建一个套接字,根据循环修给其端口号。
用connect触发三次握手。
根据返回的消息判断端口的开闭。
可以扫描多次,直到用户输入exit将退出大循环,结束程序。
输入格式:“scan *.*.*.* nnnn-mmmm”
三、实验过程(包含实验结果)
四、讨论与分析
1、阐述全连接扫描的原理。
包括请求SYN,应答SYN+ACK,响应ACK。
三次握手。
2、你的程序是否考虑了扫描效率?如没有考虑你准备如何改进?没有。
用半开。
五、实验者自评(从实验设计、实验过程、对实验知识点的理解上给出客观公正的自我评价)// TCPClient.cpp文件
#include "afx.h"
#include "InitSock.h"
#include <stdio.h>
#include <iostream>
using namespace std;
CInitSock initSock;// 初始化Winsock库int argc,char **argv
#pragma comment(lib,"msvcrt.lib")
DWORD destIP;
USHORT startPort,endPort;
void main()
{
char input[60]="";//输入串
while(1)//一直循环,直到遇见“exit”
{
printf("______________________________\n");//字幕
printf("全扫描-输入格式(输入exit退出):\nscan *.*.*.* nnnn-mmmm\n");
printf("------------------------------\n");
gets(input);//输入,可以输入空格
if (strcmp(input,"exit")==0)return;//要是输入“exit”,就退出
CString ss=input;//将串赋给类CString,便于对串进行处理
int pos=ss.Find(" ");
CString scan=ss.Left(pos);//"scan"
CString ip_port=ss.Right(ss.GetLength()-pos-1);
pos=ip_port.Find(" ");
CString ip=ip_port.Left(pos);//"IP"
CString port=ip_port.Right(ip_port.GetLength()-pos-1);
pos=port.Find("-");
CString start=port.Left(pos);//"开始端口"
CString end=port.Right(port.GetLength()-pos-1);//"结束端口"
destIP=inet_addr(ip);//IP
startPort=atoi(start);//开始端口
endPort = atoi(end);//结束端口
SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接字
sockaddr_in servAddr; //对方地址信息
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = destIP;//IP
USHORT i=startPort;
while(i<endPort+1)//包括端点端口
{
servAddr.sin_port = htons(i);
if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
printf(" Port %d closed\n",(i));
else
printf(" Port %d open\n",(i));
i++;
} ::closesocket(s);
}
}。