文档库 最新最全的文档下载
当前位置:文档库 › 端口扫描程序的设计与实现

端口扫描程序的设计与实现

端口扫描程序的设计与实现
端口扫描程序的设计与实现

网络综合实验

任务书

一、目的与要求

1.性质:设计性实验。

2.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。

3.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。

4.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

5.学生要求人数:1人。

二、主要内容

1.编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。基本工作过程如下:

(1) 设定好一定的端口扫描范围;

(2) 设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;

(3) 创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口;

(4) 如果返回false,表示端口没有开放,否则端口开放。

三、进度计划

四、设计成果要求

1.完成规定的实验任务,保质保量;

2.完成综合实验报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。

五、考核方式

1.平时成绩+验收答辩+实验报告;

2.五级分制。

学生姓名:

指导教师:

2009 年6月8 日

一、综合实验的目的与要求

1.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,加深对JAVA编程语言的使用,促进编程能力的提高,同时为网络编程打下一个比较好的基础。同时对实验的过程要有完全的了解。

2.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出

完整的源程序,基本功能完善,方便易用,操作无误。

二、综合实验正文

1.编程语言的选择

针对编写的是端口扫描的程序,所以我选择了JA V A编程,因为要简单而方便的试验端口扫描的功能。

2.端口扫描实现的功能是:显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作

2.1 如何选择IP段和端口

创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口。而我使用的是socket函数来实现端口的扫描和IP地址的选择扫描。

2.2 如何实现快速扫描端口

通过实现多线程,当一个IP或者一个端口同时分配多个线程进行扫描,速度会比单线程扫描快许多。

2.3 显示扫描结果

可以在使用JA V A编写的时候,可以通过使用JScrollPane控件实现显示结果。

2.4 实现要求功能之余美化外观

3.创建应用程序界面

3.1 建立主窗体,“JA V A端口扫描器”

图1-1

3.2 IP地址的输入部分

图1-2

3.3 端口部分,其中包括指定的端口和指定扫描的端口范围

图1-3

3.4 多线程的实现和延时的控制部分

图1-4

3.5 增加的保存及快捷键功能

图1-5

4.扫描的整个过程

4.1 填写IP地址192.168.1.100—192.168.1.120

4.2 填写端口扫描的范围为1—300

4.3 线程数选择为100

4.4 扫描结果如下

图1-6

5.端口扫描的主要部分程序如下

import https://www.wendangku.net/doc/e82923851.html,.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

/*

*实现扫描的主体程序

*/

public class ThreadScan{

public static JFrame main=new JFrame("JA V A端口扫描器");

//显示扫描结果

public static JTextArea Result=new JTextArea("",4,40);

//滚动条面板

public static JScroll PaneresultPane = newJScrollPane(Result,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED;

//输入主机名文本框

public static JTextField hostname=new JTextField("localhost",8);

//输入ip地址前3位的输入框

public static JTextField fromip1=new JTextField("0",3);

//输入ip地址4~6位的输入框

public static JTextField fromip2=new JTextField("0",3);

//输入ip地址7~9位的输入框

public static JTextField fromip3=new JTextField("0",3);

//输入起始ip地址最后4位的输入框

public static JTextField fromip4=new JTextField("0",3);

//输入目标ip地址最后4位的输入框

public static JTextField toip=new JTextField("0",3);

//输入最小端口的输入框

public static JTextField minPort=new JTextField("0",4);

//输入最大端口的输入框

public static JTextField maxPort=new JTextField("1000",4);

//输入最大线程数量的输入框

public static JTextField maxThread=new JTextField("100",3);

//错误提示框

public static JDialog DLGError=new JDialog(main,"错误!");

public static JLabel DLGINFO=new JLabel("");

public static JLabel type=new JLabel("请选择:");

//扫描类型

public static JRadioButton radioIp = new JRadioButton("IP地址:"); public static JRadioButton radioHost = new JRadioButton("主机名:",true); //单选框组

public static ButtonGroup group = new ButtonGroup();

public static JLabel P1=new JLabel("端口范围:");

public static JLabel P2=new JLabel("~");

public static JLabel P3=new JLabel("~");

public static JLabel Pdot1 = new JLabel(".");

public static JLabel Pdot2 = new JLabel(".");

public static JLabel Pdot3 = new JLabel(".");

public static JLabel TNUM=new JLabel("线程数:");

public static JLabel RST=new JLabel("扫描结果: ");

public static JLabel con=new JLabel(" ");

//定义按钮

public static JButton OK = new JButton("确定");

public static JButton Submit = new JButton("开始扫描");

public static JButton Cancel = new JButton("退出");

public static JButton saveButton = new JButton("保存扫描结果");

//菜单栏

public static JMenuBar myBar = new JMenuBar();

public static JMenu myMenu = new JMenu("文件(F)");

public static JMenuItem saveItem = new JMenuItem("保存扫描结果(S)"); public static JMenuItem exitItem = new JMenuItem("退出(Q)");

public static void main(String[] args){

main.setSize(500,400);

main.setLocation(300,300);

main.setResizable(false);

main.setLayout(new GridBagLayout());

main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

DLGError.setSize(300,100);

DLGError.setLocation(400,400);

//添加“菜单栏”

myMenu.add(saveItem);

myMenu.add(exitItem);

myBar.add(myMenu);

main.setJMenuBar(myBar);

//设置热键

myMenu.setMnemonic('F');

saveItem.setMnemonic ('S');

//为“另存为”组件设置快捷键为ctrl+s

saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_ MASK));

exitItem.setMnemonic('Q');

exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_ MASK));

//采用表格包型布局

Container mPanel = main.getContentPane();

GridBagConstraints c = new GridBagConstraints();

c.insets = new Insets(10,0,0,10);

c.gridx = 0;

c.gridy = 0;

c.gridwidth = 10;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(type,c);

group.add(radioIp);

group.add(radioHost);

c.gridx = 0;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(radioIp,c);

c.gridx = 1;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(fromip1,c);

c.gridx = 2;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(Pdot1,c);

c.gridx = 3;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip2,c);

c.gridx = 4;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(Pdot2,c);

c.gridx = 5;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip3,c);

c.gridx = 6;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(Pdot3,c);

c.gridx = 7;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(fromip4,c);

c.gridx = 8;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(P2,c);

c.gridx = 9;

c.gridy = 1;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(toip,c);

c.gridx = 0;

c.gridy = 2;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(radioHost,c);

c.gridx = 1;

c.gridy = 2;

c.gridwidth = 3;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(hostname,c);

c.gridx = 0;

c.gridy = 3;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(P1,c);

c.gridx = 1;

c.gridy = 3;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(minPort,c);

c.gridx = 2;

c.gridy = 3;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(P3,c);

c.gridx = 3;

c.gridy = 3;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(maxPort,c);

c.gridx = 0;

c.gridy = 4;

c.gridwidth = 1;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(TNUM,c);

c.gridx = 1;

c.gridy = 4;

c.gridwidth = 3;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER; mPanel.add(maxThread,c);

c.gridx = 0;

c.gridy = 5;

c.gridwidth = 3;

c.fill = GridBagConstraints.VERTICAL;

c.anchor = GridBagConstraints.CENTER; mPanel.add(Submit,c);

c.gridx = 6;

c.gridy = 5;

c.gridwidth = 4;

c.fill = GridBagConstraints.VERTICAL;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(Cancel,c);

c.gridx = 0;

c.gridy = 6;

c.gridwidth = 10;

c.fill = GridBagConstraints.BOTH;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(RST,c);

//设置文本区域可以换行

Result.setLineWrap(true);

//设置文本区域不可编辑

Result.setEditable(false);

c.gridx = 0;

c.gridy = 7;

c.gridwidth = 10;

c.gridheight = 4;

c.fill = GridBagConstraints.VERTICAL;

c.anchor = GridBagConstraints.CENTER;

mPanel.add(resultPane,c);

Container dPanel = DLGError.getContentPane();

dPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); dPanel.add(DLGINFO);

dPanel.add(OK);

Submit.addActionListener(new SubmitAction());

Cancel.addActionListener(new CancleAction());

OK.addActionListener(new OKAction());

//实现退出功能

exitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.exit(0);

}

});

//实现帮助功能

saveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser fc=new JFileChooser();

int returnVal=fc.showSaveDialog(null);

//点击“保存”

if(returnVal == 0){

File saveFile=fc.getSelectedFile();

try {

FileWriter writeOut = new FileWriter(saveFile);

writeOut.write(ThreadScan.Result.getText());

writeOut.close();

}

catch (IOException ex) {

System.out.println("保存失败");

}

}

//点击“取消”

else

return;

}

});

main.setVisible(true);

}

}

/*

*实现“取消”功能

*退出程序

*/

class CancleAction implements ActionListener{

public void actionPerformed (ActionEvent e){

System.exit(0);

}

}

/*

*实现“确定”功能

*完成扫描

*/

class SubmitAction implements ActionListener{

public void actionPerformed (ActionEvent a){

int minPort;

int maxPort;

int maxThread;

int ip1 = 0;

int ip2 = 0;

int ip3 = 0;

int ipstart = 0;

int ipend = 0;

String ipaddress = "";

String hostname = "";

ThreadScan.Result.setText("");

//将"确定"按钮设置成为不可用

if(ThreadScan.Submit.isEnabled()){

ThreadScan.Submit.setEnabled(false);

}

/*

*判断搜索的类型

*按照ip地址扫描:type = 0

*按照主机名称扫描:type = 1

*/

if(ThreadScan.radioIp.isSelected()){

TCPThread.type = 0;

//判断ip的前3位是否为int型

try{

ip1=Integer.parseInt(ThreadScan.fromip1.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的ip!");

ThreadScan.DLGError.setVisible(true);

return;

}

//判断ip的4~6位是否为int型

try{

ip2=Integer.parseInt(ThreadScan.fromip2.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的ip!");

ThreadScan.DLGError.setVisible(true);

return;

}

//判断ip的7~9位是否为int型

try{

ip3=Integer.parseInt(ThreadScan.fromip3.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的ip!");

ThreadScan.DLGError.setVisible(true);

return;

}

//判断起始ip的最后4位是否为int型

try{

ipstart=Integer.parseInt(ThreadScan.fromip4.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的ip!");

ThreadScan.DLGError.setVisible(true);

return;

}

//判断目标ip的最后4位是否为int型

try{

ipend=Integer.parseInt(ThreadScan.toip.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的目标ip!");

ThreadScan.DLGError.setVisible(true);

return;

}

//判断起始ip是否正确

//判断条件:大于0且小于等于255

if(ip1<0 || ip1>255||ip2<0 || ip2>255||ip3<0 || ip3>255||ipstart<0 || ipstart>255){ ThreadScan.DLGINFO.setText(" ip地址为0-255的整数! ");

ThreadScan.DLGError.setVisible(true);

return;

}

else{

TCPThread.ip1 = ip1;

TCPThread.ip2 = ip2;

TCPThread.ip3 = ip3;

TCPThread.ipstart = ipstart;

}

//判断目标ip是否正确

//判断条件:大于0且小于等于255

if(ipend<0 || ipend>255){

ThreadScan.DLGINFO.setText("目标ip地址为0-255的整数! ");

ThreadScan.DLGError.setVisible(true);

return;

}

else{

TCPThread.ipend = ipend;

}

ipaddress = "" + ip1 + ip2 + ip3 + ipstart;

/*

*判断ip地址的有效性

*/

try{

TCPThread.hostAddress=InetAddress.getByName(ipaddress);

}

catch(UnknownHostException e){

ThreadScan.DLGINFO.setText(" 错误的IP或地址不可达! ");

ThreadScan.DLGError.setVisible(true);

return;

}

}

//根据主机名进行端口扫描

if(ThreadScan.radioHost.isSelected()){

TCPThread.type = 1;

/*

*判断主机名称的有效性

*/

try{

TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText());

}

catch(UnknownHostException e){

ThreadScan.DLGINFO.setText("错误的域名或地址不可达! ");

ThreadScan.DLGError.setVisible(true);

return;

}

}

/*

*判断端口号的有效性

*/

try{

minPort=Integer.parseInt(ThreadScan.minPort.getText());

maxPort=Integer.parseInt(ThreadScan.maxPort.getText());

maxThread=Integer.parseInt(ThreadScan.maxThread.getText());

}

catch(NumberFormatException e){

ThreadScan.DLGINFO.setText("错误的端口号或线程数!端口号和线程数必须为整数!");

ThreadScan.DLGError.setVisible(true);

return;

}

/*

*判断最小端口号的有效范围

*判断条件:大于0且小于65535,最大端口应大于最小端口

*/

if(minPort<0 || minPort>65535 || minPort>maxPort){

ThreadScan.DLGINFO.setText("最小端口必须是0-65535并且小于最大端口的整数!");

ThreadScan.DLGError.setVisible(true);

return;

}

else{

TCPThread.MIN_port=minPort;

}

/*

*判断最大端口号的有效范围

*判断条件:大于0且小于65535,最大端口应大于最小端口

*/

if(maxPort<0 || maxPort>65535 || maxPort

ThreadScan.DLGINFO.setText("最大端口必须是0-65535并且大于最小端口的整数!");

ThreadScan.DLGError.setVisible(true);

return;

}

else{

TCPThread.MAX_port=maxPort;

}

/*

*判断线程数量的有效范围

*判断条件:大于1且小于200

*/

if(maxThread<1 || maxThread>200){

ThreadScan.DLGINFO.setText("线程数为1-200的整数! ");

ThreadScan.DLGError.setVisible(true);

return;

}

ThreadScan.Result.append("线程数"+ThreadScan.maxThread.getText()+"\n");

//启动线程

for(int i=0;i

new TCPThread("T" + i,i).start();

}

}

}

/*

*实现错误提示框中的“确定”按钮功能

*/

class OKAction implements ActionListener{

public void actionPerformed (ActionEvent e){

ThreadScan.DLGError.dispose();

}

}

多线程类文件:

import https://www.wendangku.net/doc/e82923851.html,.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TCPThread extends Thread{

public static InetAddress hostAddress;

//最小的端口号

public static int MIN_port;

//最大的端口号

public static int MAX_port;

//线程总数

private int threadnum;

//查询方式:0为ip;1为主机名

public static int type;

//ip地址前3位

public static int ip1;

//ip地址4~6位

public static int ip2;

//ip地址7~9位

public static int ip3;

//起始ip地址的最后4位

public static int ipstart;

//结束ip地址的最后4位

public static int ipend;

//完整的ip地址

public static String ipAll;

//扫描的主机名称或ip

String hostname = "";

//端口的类别

String porttype = "0";

/*

*构造函数

*/

public TCPThread(String name,int threadnum){

super(name);

this.threadnum = threadnum;

}

/*

*运行函数

*/

public void run() {

//ip地址

int h = 0;

//端口号

int i = 0;

Socket theTCPsocket;

//根据ip地址进行扫描

if(type == 0){

//ip地址循环扫描

for(h = ipstart; h <=ipend; h++){

//组成完整的ip地址

ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;

hostname = ipAll;

try{

//在给定主机名的情况下确定主机的IP 地址

hostAddress=InetAddress.getByName(ipAll);

}

catch(UnknownHostException e){

}

//不同的端口循环扫描

for (i = MIN_port+threadnum; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText()); i += Integer.parseInt(ThreadScan.maxThread.getText())){

try{

theTCPsocket=new Socket(hostAddress,i);

theTCPsocket.close();

ThreadScan.Result.append(hostname+":"+i);

//判断端口的类别

switch(i){

case 21:

porttype = "(FTP)";

break;

case 23:

porttype = "(TELNET)";

break;

case 25:

porttype = "(SMTP)";

break;

case 80:

porttype = "(HTTP)";

break;

case 110:

porttype = "(POP)";

break;

case 139:

porttype = "(netBIOS)";

break;

case 1433:

porttype = "(SQL Server)";

break;

case 3389:

porttype = "(Terminal Service)";

break;

case 443:

porttype = "(HTTPS)";

break;

case 1521:

porttype = "(Oracle)";

break;

}

//端口没有特定类别

if(porttype.equals("0")){

ThreadScan.Result.append("\n");

}

else{

ThreadScan.Result.append(":"+porttype+"\n");

}

}

catch (IOException e){

}

}

}

//扫描完成后,显示扫描完成,并将“确定”按钮设置为可用

if (i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText())){ ThreadScan.Result.append("\n"+"扫描完成...");

//将"确定"按钮设置成为可用

if(!ThreadScan.Submit.isEnabled()){

ThreadScan.Submit.setEnabled(true);

}

}

}

//按照主机名进行端口扫描

if(type == 1){

for (i = MIN_port+threadnum; i < MAX_port+Integer.parseInt(ThreadScan.maxThread.getText()); i += Integer.parseInt(ThreadScan.maxThread.getText())){

try{

theTCPsocket=new Socket(hostAddress,i);

theTCPsocket.close();

ThreadScan.Result.append(" "+i);

switch(i){

case 21:

porttype = "(FTP)";

break;

case 23:

porttype = "(TELNET)";

break;

case 25:

porttype = "(SMTP)";

break;

case 80:

porttype = "(HTTP)";

break;

case 110:

porttype = "(POP)";

break;

case 139:

porttype = "(netBIOS)";

break;

case 1433:

porttype = "(SQL Server)";

break;

case 3389:

porttype = "(Terminal Service)";

break;

case 443:

porttype = "(HTTPS)";

break;

case 1521:

porttype = "(Oracle)";

break;

}

//端口没有特定类别

if(porttype.equals("0")){

ThreadScan.Result.append("\n");

}

else{

ThreadScan.Result.append(":"+porttype+"\n");

}

}

catch (IOException e){

}

}

//扫描完成后,显示扫描完成,并将【确定】按钮设置为可用

if (i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText())){

ThreadScan.Result.append("\n"+"扫描完成...");

//将【确定】按钮设置成为可用

if(!ThreadScan.Submit.isEnabled()){

ThreadScan.Submit.setEnabled(true);

}

}

}

}

}

三、综合实验总结或结论

1.通过本次实验,我对于JA V A编程又有了一个新的认识,同时更加熟悉java编程的命令。

2.了解了IP地址扫描和端口扫描的原理。

3.通过解决编程遇到的问题,提高编程水平,积累经验。

四、参考文献

[1] 作者1, 作者2. 书名. 出版单位, 版本. 出版日期

张白一,崔尚森,面向对象程序设计---JA V A,西安电子科技大学出版社,第2版,2006 .1

程序的设计艺术与方法

程序设计艺术与方法 实验一 STL 的熟悉与使用 1.实验目的(1)掌握 C++中 STL 的容器类的使用。(2)掌握C++中 STL 的算法类的使用。 2.试验设备硬件环境:PC 计算机软件环境:操作系统:Windows 2000 / Windows XP / Linux 语言环境:Dev cpp / gnu c++ 3.试验容 (1) 练习 vector 和 list 的使用。定义一个空的 vector,元素类型为 int,生成 10 个随机数插入到 vector 中,用迭代器遍历 vector 并输出其中的元素值。在vector 头部插入一个随机数,用迭代器遍历 vector 并输出其中的元素值。用泛型算法find 查找某个随机数,如果找到便输出,否则将此数插入 vector 尾部。用泛型算法 sort 将 vector 排序,用迭代器遍历 vector 并输出其中的元素值。删除 vector 尾部的元素,用迭代器遍历 vector 并输出其中的元素值。将 vector 清空。定义一个 list,并重复上述实验,并注意观察结果。 (2) 练习泛型算法的使用。 - 149 定义一个 vector,元素类型为 int,插入 10 个随机数,使用 sort 按升序排序,输出每个元素的值,再按降叙排序,输出每个元素的值。练习用 find 查找元素。用 min 和max 找出容器中的小元素个大元素,并输出。 源代码: #include #include #include #include #include using namespace std; vector myV; bool sortup(int v1,int v2) { return v1::iterator it1; for (it1=myV.begin();it1!=myV.end();it1++) { cout<<(*it1)<

计算机网络实验之Ping程序的设计与实现

计算机网络实验之Ping程序的设计与 实现

课程名称计算机网络 实验序号实验五 实验项目 Ping程序的设计与实现 03月 25 日

实验报告要求 1、实验报告封面填表说明(每份实验报告必须附上封面) (1)课程名称:要求与实验大纲和实验指导书中的课程名称一致。 (2)实验序号:指该课程的第几个实验。 (3)实验项目:要求与实验大纲和实验指导书中的实验项目一致。 (4)实验地点:填写完成该实验项目所在的实验室名称。 (5)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。 (6)实验类型:是指演示性、操作性、验证性、综合性、设计性。 演示性:教师操作,学生观察,验证理论、说明原理和方法。 操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。 验证性:按实验指导书(教材)要求,由学生经过操作验证所学理论,加深对理论、知识的理解,掌握基本实验知识、方法、技能、数据处理等。 综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多的知识、多种方法,按要求或自拟实验方案进行实验。主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的

设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计缺制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。 2、实验报告的格式 3、教师批改学生实验报告要求 (1)批改:全部批改及更正错误。 (2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。 (3)签名及批改日期:任课教师必须在每份学生实验报告中签名和写上批改日期。 (4)成绩:填写学生实验成绩表,实验成绩作为考试成绩评定的依据。 (4)评语:任课教师批改学生实验报告时,应给出简明扼要的评

计算机网络--简单聊天程序的设计与实现

实验报告 课程计算机网络实验名称简单聊天程序的设计与实现第 1 页 一、实验目的 1.熟悉VisualC++的基本操作;掌握最基本的Client/Server(客户机/服务器)模式 的网络编程技术,并在此基础上实现更为复杂的网络编程。 2.基本了解基于对话框的windows应用程序的编写过程。 3.对于Windows Socket编程建立初步概念。 二、实验内容 1、按实验步骤中参考程序使用VC++设计出程序; 2、在第1步的基础上使用VC++或其他工具设计出一个能实现两个人聊天的网络程序。 三、实验原理 1.Windows Socket和套接字的基本概念; 程序分为服务端和客户端两个,其主要工作过程如图1所示: 服务器端:服务器程序首选启动,通过调用socket()函数建立一个套接字,然后调用bind()函数使套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请示队列的长度,之后就调用accept()来接收连接。客户机端:客户机程序也使用socket()建立套接字,然后调用connect()函数和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。 最后,等数据传送结束后,双方调用close()关闭套接字。 四、实验环境和实验工具 实验环境:Windows 平台、实验工具:VC++ 五、实验步骤 服务器端程序 (1)运行VC++,选择File --->New,弹出如图2所示的窗口。 (2)创建一个名为CS的工程:选中Projects中的MFC AppWizard[exe],在Project name中 输入Server,在Location中选择存储的目录,如本例中为D:\VC temp\.接着点击OK。 (3)在弹出的窗口中选择Dialog based,然后点击“Next”。出现图3所示的窗口,选择Windows Sockets,并输入服务器,点击“Next”. 如果忘了添加Windows Sockets选项,可以在文件头部添加下列语句进行补救: #include "Winsock.h" #include "Ws2tcpip.h" #pragma comment(lib,"Ws2_32.lib" ) 注:这些语句支持winsock2。 (4)其余窗口一直默认,点击“Next”直至“Finish”

端口扫描与检测技术的实现论文

端口扫描与检测技术的实现 摘要 随着Internet日益广泛的应用,黑客攻击行为也是有增无减。如何有效地抵御这种攻击行为,一直是信息安全领域的焦点。 而其中,端口扫描技术吸引了越来越多人的关注。端口扫描是黑客搜集目标主机信息的一种常用方法。为了有效地对付网络入侵行为,对端口扫描进行研究是非常有益和必要的。攻击者在攻击一个目标时,首先要获取目标的一些基本信息,端口扫描就是其中最简单最重要的方法之一,它可以扫描目标机器中开放的端口,从而确定目标机器中提供的服务,为下一步攻击做准备。针对端口扫描技术,相应的端口扫描检测技术显的越发重要,作为网络安全技术中的一个重要课题,端口扫描检测技术意义重大。 本文首先阐述了端口扫描技术以及端口扫描检测技术的基本原理和常用方法,然后在此基础上设计了一个对基于网络的端口进行扫描,能判断出目标主机端口开放情况的程序以及一个从网络信息的数据包的捕获和分析着手,再通过统计判断是否存在端口扫描行为的程序,最后从攻击和防御的角度对端口扫描和检测技术作了演示及分析。 关键词:端口;端口扫描;数据包捕获;端口检测

The Realization of Port Scanning and Detecting Technology Abstract As the widely applying of Internet, the attacking behavior made by hacker is increasing but not decreasing. How to resist this kind of attacking behavior is always the key point of the domain of the information security. And the port scanning draws people's attention more and more. Port scanning is a usual method which is used by the hacker to collect the information of the target main processor. In order to deal with the invading behavior of the Internet effectively, it is very useful and necessary to work on the port scanning. When an attacker attacks to a target, he or she will firstly gets some basic information about the target, and the port scanning is one of the most simple and important methods which can scan the opening Port of the target machine to make sure the offering service made by the target machine, and it is a preparation to the next attacking. The port detecting seems more and more important referring to the port scanning. As an important task of the secure technique of Internet, the port detecting is of great significance. In this thesis, it firstly elaborates the basic principles and usual methods of the port scanning. On this basis, it then designs a program which can scan the Port of the Internet, and assess the opening situation of the target main processor, and the other program which begins on capturing and analyzing the information packet of Internet, and then assess whether there is a behavior about port scanning through statistic analyses. Lastly, it demonstrates and analyses the technology of port scanning and port detecting from the viewpoint of attacking and resisting. Key Words:port; port scanning; packet capture; port detecting

《设计程序与方法》课程标准模板

《设计程序与方法》课程标准 课程编码[ ] 适用专业[ ] 课程承担单位[ ] 学时[ ] 制定人[ ] 制定日期[ ] 审核人[ ] 审核日期[ ] 批准人[ ] 批准日期[ ] 一、课程性质与作用 本课程是工业设计专业的一门专业基础课,是理论与实践相结合的课程。本课程采用任务体系教学,通过学习工业产品设计的任务与原则,将产品形态设计、产品造型的美学法则、产品色彩设计的基本理论、与工业产品造型设计有关的人机工程学知识、产品造型设计的表现技法和主要程序,以及产品造型的质量评价等知识融会贯通,掌握工业产品设计的基础理论和方法,探求人一机一环境相互协调的设计思想,学会一般工业产品的设计程序和方法,能与他人合作完成工业产品设计任务,配合其他人员完成一般家电产品、家具产品、电子设备等工业产品的开发和设计工作。 本课程的主要就业岗位为工业设计师、产品设计师,以“电热水壶设计”、“移动硬盘造型设计”项目为载体,将工业设计方法、程序、市场调研、专利等知识融到项目中进行讲解。本课程是工业设计课程体系中职业技能的重要内容,是工业设计专业的核心课程之一,是学生必须掌握的职业技能要素,是达到工业设计职业标准的前提和基础。 本课程需要前期学习《工业设计概论》、《设计表现技法》课程,完成前导任务是“本专业相关的美术基础训练”,为本课程学习提供理论知识与必备技能。本课程为后续课程《产品造型设计》、《产品结构与创新设计》提供必须的专业基础知识。 二、课程目标 本课程的核心能力是产品的设计流程与设计方法,这就要求学生先掌握必要的设计手段和设计理论知识,继而获得岗位所需的实际产品设计知识和技能,为后续课程的学习,为将来走上社会从事产品设计、工业设计等工作打下坚实的基础。 (一)知识目标 1.了解工业设计的各种方法; 2.学会使用有效的方法和流程进行工业产品的策划和设计; 3.能与团队协作完成完整的工业产品设计任务。 (二)能力目标 1.学会工业产品形态设计的思维方法和创造方法;

TCP的客户 服务器 端口扫描程序设计

海南大学信息科学技术学院《安全扫描技术》 TCP的客户/服务器/端口扫描程序设计 学号: ______ 姓名: 年级: 2010级 __________ 专业:信息安全 ______ 指导老师:顾剑 ____

目录 1实验目的及要求 (1) 2实验的背景及意义 (1) 3实验流程 (1) 4实验内容与步骤 (3) 5实验代码 (5) 5.1 TCP服务器程序: (5) 5.2 TCP客户端: (8) 5.3 TCP端口扫描: (10) 6实验操作手册 (11) 7实验总结 (14)

第 1 页共17 页 1实验目的及要求 (1)、熟悉Microsoft Visual Studio 2006编程环境。 (2)、了解TCP客户/服务器/扫描端口的模型原理。 (3)、熟悉Socket编程原理,掌握简单的套接字编程。 2实验的背景及意义 (1)、TCP客户和服务器 TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后数据传送,最后拆除连接三个过程并且TCP在建立连接时又分三步走: 第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号; 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP 序号被加一,ACK即确认(Acknowledgement)。 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。 这就是所说的TCP三次握手(Three-way Handshake)。简单的说就是:(C:客户端,S:服务端) C:SYN到S S:如成功--返回给C(SYN+ACK) C:如成功---返回给S(ACK)以上是正常的建立连接方式(2)、TCP端口扫描 “端口”在计算机网络领域中是个非常重要的概念。它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。如果有需要的话,一台计算机中可以有上万个端口。 端口是由TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用[IP:端口]来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向[A:端口]就可以实现通信了。 可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接,这也是端口扫描的主要目的。 3实验流程 (1)、TCP客户程序和服务器程序流程图 程序分两部分:客户程序和服务器程序。 工作过程是:服务器首先启动,它创建套接字之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。

常见的端口扫描类型及原理

常见的端口扫描类型及原理 常见的扫描类型有以下几种: 秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术。 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。 秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。 但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN 扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK 扫描等。 1、Connect()扫描: 此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。 TCP connect端口扫描服务端与客户端建立连接成功(目标

端口开放)的过程: ① Client端发送SYN; ② Server端返回SYN/ACK,表明端口开放; ③ Client端返回ACK,表明连接已建立; ④ Client端主动断开连接。 建立连接成功(目标端口开放)如图所示 TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程: ① Client端发送SYN; ② Server端返回RST/ACK,表明端口未开放。 未建立连接成功(目标端口关闭)如图所示。 优点:实现简单,对操作者的权限没有严格要求(有些类型的端口扫描需要操作者具有root权限),系统中的任何用户 都有权力使用这个调用,而且如果想要得到从目标端口返回banners信息,也只能采用这一方法。 另一优点是扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字,从而加速扫描。 缺点:是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。

主机端口扫描程序设计

主机端口扫描程序设计 摘要 计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。 本程序是在Windows系统中使用C语言用MFC完成的一个端口扫描程序。此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。 关键词:端口扫描、TCP扫描、UDP扫描、TCP多线程扫描

目录 1引言 (1) 1.1 课题的背景及意义 (1) 1.2 端口扫描现状 (1) 2系统设计 (1) 2.1 系统主要目标 (1) 2.2 开发环境及工具 (1) 2.3 功能模块与系统结构 (2) 3系统功能程序设计 (4) 3.1 获取本机IP (4) 3.2 分割字符串函数的实现 (4) 3.3 获取待扫描的IP地址 (5) 3.4 获取待扫描的端口号 (5) 3.4.1 指定端口号的初始化 (6) 3.4.2 指定端口号的保存 (7) 3.5 TCP CONNECT()扫描 (8) 3.5.1 基本原理 (8) 3.5.2 扫描多个主机多端口多线程的实现 (8) 3.5.3 扫描结果的显示 (9) 3.6 UDP扫描 (10) 3.6.1 基本原理 (10) 3.6.2 计算效验和 (11) 3.6.3 发送UDP数据包 (11) 3.6.4 接收ICMP数据包 (12) 4测试报告 (12) 4.1 TCP扫描检测 (12) 4.1.1扫描本机 (12) 4.1.2扫描网络中其他主机 (13) 4.1.3 扫描IP段 (13) 4.2 UDP扫描检测 (14) 4.2.1 扫描本机 (14) 4.1.2扫描网络中其他主机 (15) 4.3 TCP、UDP一起扫描 (16) 结论 (17) 参考文献 (17)

词法分析程序设计与实现

` 实验一词法分析程序设计与实现 一、实验目的及容 调试并完成一个词法分析程序,加深对词法分析原理的理解。 二、实验原理(状态转换图) 1、C语言子集 (1)关键字: begin if then while do end 所有关键字都是小写。 (2)运算符和界符: := + – * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter| digit)* NUM=digit digit * (4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2、各种单词符号对应的种别码 文档Word

` 3、词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 二、软件平台及工具 PC机以及VISUAL C++6.0软件。 三、实验方法、步骤(或:程序代码或操作过程)(1)程序代码: #include #include #include char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={egin,if,hen,while,do,end}; void scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) 文档Word ` {

端口扫描程序设计

网络安全程序设计结课论文端口扫描程序设计

目录 第一章序言 (3) 第二章系统设计 (5) 2.1 运行环境及语言 (5) 2.2系统功能 (6) 2.3程序运行流程图 (6) 2.4 程序设计过程 (6) 2.41创建工程 (6) 2.42 主机端口扫描程序设计流程 (8) 2.43主要代码 (9) 2.5运行结果测试 (15) 第三章总结及心得 (16) 3.1 总结 (16) 3.2 心得体会 (16) 第四章参考文献 (16)

第一章序言 1.1 背景 Internet快速的发展,为我们带来了方便同时也带给了我们信息安全担忧。在计算机信息安全管理中可以通过端口扫描收集系统的信息来自动监测远程或本地主机安全性弱点的程序,可以发现远程服务器的各种tcp端口的分配及提供的服务与他们的软件版本。从而让管理员间接的或直观的了解到远程主机所存在的安全问题。从而端口扫描技术得到人们的重视。 1.2目的 该文章对端口扫描技术的原理和应用进行了阐述,并设计了一个简单的基于windows平台上的端口扫描系统。此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。 1.3端口扫描概述 网络安全探测在网络安全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都是建立在端口扫描的基础

Ping程序的实现

湖南工业大学 课程设计 资料袋 计算机与通信学院学院(系、部)2011 ~ 2012 学年第 1 学期课程名称计算机网络原理指导教师李建设职称副教授 学生姓名专业班级学号 题目 成绩起止日期2011 年11 月24 日~2011 年12 月4 日 目录清单

课程设计任务书 2010 —2011学年第 2 学期 学院(系、部) 计算机与通信学院 专业 软件工程 班级 091-3 课程名称: 计算机网络原理 学生姓名: 自己填写 设计题目: Ping 程序的实现 指导教师: 李建设 完成期限:自 2011 年 11 月 24 日至 2011 年 12 月 4 日 共 2 周 内 容 及 任 务 一、设计内容 实现ping 功能。程序能实现基本的ping 操作,发送ICMP 回显请求报文,接收显应答报文。 1. 能记录路由。程序提供了“-r ”选项,用以记录从源主机到目的主机的路由。 2. 能输出指定条数的记录。程序提供了“-n ”选项,用以输出指定条数的记录。 3. 能按照指定大小输出每条记录。程序提供了“datasize ”选项,用以指定输出的数据报的大小。 4. 能输出用户帮助。程序提供了用户帮助,显示程序提供的选项以及选项格式等。 5. 以图形显示输出结果。 二、设计任务 课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。 三、设计要求 1. 按功能要求开发系统,能正确运行。程序代码书写规范,有充足的注释。 2. 课程设计所使用的编程语言任选,但建议使用C 或C++; 3. 绿色软件:程序运行不需安装,避免写系统和注册表; 进 度 安 排 起止日期 工作内容 2011-11-24~2011-11-27 选题 2011-11-28~2011-11-29 系统分析和设计; 2011-11-30~2011-12-3 熟悉软件开发工具、编码系统、系统测试 2011-12-04~2011-12-05 撰写并提交课程设计说明书 (含电子文档)、源程序等。 主 要 参 考 资 料 [1] (美) Larry Peterson 著,薛静锋等译. 《计算机网络:系统方法》 (第4版) ,机械工业出版社,2009 [2] (荷) Andrew S.Tanenbaum 著,潘爱民译. 《计算机网络》(第4版),清华大学出版社, 2004 [3] 谢希仁著.《计算机网络》((第5版) ,电子工业出版社, 2008.1 [4] 吴功宜等著.《计算机网络课程设计》,机械工业出版社,2005 指导教师(签字): 年 月 日 系(教研室)主任(签字): 年 月 日

词法分析程序设计与实现

实验一词法分析程序设计与实现 一、实验目的及内容 调试并完成一个词法分析程序,加深对词法分析原理的理解。 二、实验原理(状态转换图) 1、C语言子集 (1)关键字: begin if then while do end 所有关键字都是小写。 (2)运算符和界符: := + –* / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter| digit)* NUM=digit digit * (4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。 2、各种单词符号对应的种别码 3、词法分析程序的功能

输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 二、软件平台及工具 PC机以及VISUAL C++6.0软件。 三、实验方法、步骤(或:程序代码或操作过程) (1)程序代码: #include #include #include char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { ch=prog[p]; p++; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { m=0; while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { token[m++]=ch; ch=prog[p++];

端口扫描报告

杭州电子科技大学软件学院网络工程试验报告 端口扫描报告 09109146 王子龙

1.端口及端口扫描技术简介 (2) 2.对现有端口扫描工具程序的理解 (2) 主界面 (3) 3.核心代码 (6) 4.个人总结 (13) 1.端口及端口扫描技术简介 根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议的服务提供的端口,也就分为TCP 端口和UDP端口。 一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。主机不只是靠IP地址来区分网络服务,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。 在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。 通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。 2. 对现有端口扫描工具程序的理解 该程序是有C++编写的。C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。 该程序能够扫描主机IP的某一个端口,或者是扫描该主机IP某一范围内的端口。并且提供多次扫描功能。如果要扫描的端口很多,在扫描过程中可以暂停扫描。扫描结果在界面的下方显示。主要显示内容有IP地址、端口号、端口状态、连接次数及备注。

课程设计---Ping程序设计与实现

课程设计 课程名称____计算机网络_____ 题目名称_Ping程序设计与实现 学生学院____计算机学院____ 专业班级____08计科4班___ 学号_______ 2011年 1 月8 日

一、课程设计目的 本次课程设计的目的旨在通过网络相关程序的编写,使我们能深入理解TCP/IP协议机制,以及初步掌握基于Winsocket的网络编程技术。同时巩固相关的理论知识,为以后程序开发打下良好而又坚实的基础。 二、知识准备 1、ICMP协议 互联网控制信息协议(Internet CONTROL Message Protocol),用于错误报告和调试。该协议是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。我们可以通过Ping命令发送ICMP回应请求消息并记录收到ICMP回应回复消息,通过这些消息来对网络或主机的故障提供参考依据。 常见ICMP报文有响应请求报文,目标不可到达、源抑制和超时报文,此外还有时间戳报文。2、Ping工作原理 Ping的原理就是首先建立通道,然后发送包,对方接受后返回信息,这个包至少包括以下内容:发送的时候,包的内容包括对方的ip地址和自己的地址,还有序列数;回送的时候包括双方地址,还有时间等,主要是接受方在都是在操作系统内核里做好的,时刻在监听。Ping程序生成一个icmp“回送请求”,将其发送给目的主机。通过检测是否可以收到目标主机的应答,便可以知道网络的连通性。 (3) Tracert 工作原理 透过向目标发送不同 IP 生存时间 (TTL) 值的ICMP回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP已超时”的消息发回源系统。Tracert 先发送 TTL 为 1 的响应数据包,并在随后的每次发送过程将 TTL 递增1,直到目标响应或 TTL 达到最大值,从而确定路由。透过检查中间路由器发回的“ICMP已超时”的消息确定路由。 三、界面设计及数据结构的说明 1 、MFC界面设计建立流程 步骤一:打开VC6.0,点击文件选项,在project选项卡中选择MFC Appwizard(exe),项目名称为ping。

端口扫描器的设计与实现

河南理工大学 计算机科学与技术学院课程设计报告 2015— 2016学年第一学期 课程名称网络与信息安全 设计题目端口扫描器的设计与实现姓名范腾飞 学号311309040113 专业班级网络1301 指导教师叶青 2016 年 1 月16 日

目录 一.课程设计的目的........................................................ 二.课程设计的要求........................................................ 三.端口扫描器相关知识................................................. 3.1:端口的基本概念............................................... 3.2:常见的端口介绍............................................... 3.3:端口扫描器基本原理....................................... 3.4:端口扫描常用技术........................................... 四.实验流程.................................................................... 4.1:基本步骤............................................................. 4.2:主要函数............................................................... 4.3流程图..................................................................... 五.实验结果..................................................................... 六.总结........................................................................

基于多线程的端口扫描程序课程设计报告

滁州学院 课程设计报告 课程名称: 设计题目:基于多线程的端口扫描程序 院部:计算机与信息工程学院 专业:网络工程 组别:第六组 起止日期: 2012 年12月31日~2013 年1月6日指导教师: 计算机与信息工程学院二○一二年制

课程设计任务书 目录 1 需求分析. 0 1..1 网络安全 0 1.2 课程背景 0 1.3 扫描器 0 1.4 多线程扫描器介绍 (1) 错误! 未定义书签。

错误! 未定义书签。 错误! 未定义书签。 错误! 未定义书签。 1.5 端口扫描 (2) 2 概要设计. (3) 2.1 整体框架设计 (3) 2.2 流程图描述 (3) 3 详细设计. (3) 3.1 端口扫描线程启动 (3) 3.2 GUI 图形界面 (5) 3.3 按钮监听及异常处理 (6) 4 调试与操作说明. (8) 4.1 运行界面 (8) 4.2 扫描结果 (8) 4.3 错误提示 (8) 5 课程设计总结与体会. (8) 6 参考文献. (9) 7 致谢. (9) 8 附录. 0 1 需求分析 1..1 网络安全二十一世纪是信息化、网络化的世纪,信息是社会发展的重要资源。信息安全保障能力是一个国家综合国力、经济竞争实力和生存能力的重要组成部分,是世界各国在奋力攀登的制高点。网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行。网络安全包括技术领域和非技术领域两大部分: 非技术领域包括一些制度、政策、管理、安全意识、实体安全

等方面的内容; 技术领域包括隐患扫描、防火墙、入侵检测、访问控制、虚拟专用网、CA 认证、操作系统等方面的内容。这些技术的目标是保证信息的可控性、可用性、保密性、完整性、和不可抵赖性。端口扫描属于安全探测技术范畴,对应于网络攻击技术中的网络信息收集技术。 1.2 课程背景 随着Internet 的不断发展,信息技术已成为促进经济发展、社会进步的巨大推动力。端口扫描技术是网络安全扫描技术一个重要的网络安全技术。与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。安全扫描是安全技术领域中重要的一类。通过扫描能自动检测远端或本地主机系统信息,包括主机的基本信息(如计算机名、域名、组名、操作系统 型等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。 网络的安全状况取决于网络中最薄弱的环节,任何疏忽都有可能引入不安全的因素,最有效的方法是定期对网络系统进行安全分析,及时发现并修正存在的脆弱,保证系统安全。 国外安全扫描技术的历史可以追溯到20 世纪90 年代,当时因特网刚刚起步,但是在过去的十年内,扫描技术飞速发展,迄今为止,其扫描技术已经非常完善,但是在全面性,隐蔽性和智能性上还有待提高。安全扫描从最初专门为UNIX 系统而编写的一些只有简单功能的小程序发展到现在,已经出现了可以运行多个操作系统平台上的,具有复杂功能的系统程序。 国内的扫描技术是在国外的扫描器基础上发展起来的。其中有一些专门从事安全技术的公司。这些公司的扫描器以硬件为主,其特点是执行速度快,不像软件一样受到安装主机系统的限制。 然而对于更多的基于主机的端口扫描而言,简单,实用,可靠才是它们的长处。 1.3 扫描器扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程服务器的各种TCP端口的分配。这就能让我们间接的或直观的了解到远程主机所存在的安全问题。为了保证网络中计算机的安全性,必须采取主动策略, 快速、及时、准确、安全的检测出网络中计算机及防火墙开放的和未开放的端口。计算机端口扫描技术就是这种主动防御策略实现的重要技术手段。 扫描器采用模拟攻击的形式对目标可能存在的已知安全漏洞进行逐项检查。目标可以是工作站、服务器、交换机、数据库应用等各种对象。然后根据扫描结果向系统管理员提供周 密可靠的安全性分析报告,为提高网络安全整体水平产生重要依据。在网络安全体系的建设中,安全扫描工具花费低、效果好、见效快、与网络的运行相对对立、安装运行简单,可以大规模减少安全管理员的手工劳动,有利于保持全网安全政策的统一和稳定。 1.4 多线程扫描器介绍 在java 中,组件放置在窗体上的方式是完全基于代码的。组件放置在窗体上的方式通常不是通过绝对坐标控制,而是由“布局管理器”根据组件加入的顺序决定其位置。每个容器都有一个属于的自己布局管理器。使用不同的布局管理器,组件大小,位置和形状将大不相同。表格型布局管理器将容器划分成为一个多行多列的表格,表格的大小全部相同,是由其中最大的组件所决定。通过add 方法可以将组件一一放在每个表格

计算机网络实验之Ping程序的设计和实现

课程名称计算机网络 实验序号实验五 实验项目Ping程序的设计与实现

2017年03月25 日 实验报告要求 1、实验报告封面填表说明(每份实验报告必须附上封面) (1)课程名称:要求与实验大纲和实验指导书中的课程名称一致。 (2)实验序号:指该课程的第几个实验。 (3)实验项目:要求与实验大纲和实验指导书中的实验项目一致。 (4)实验地点:填写完成该实验项目所在的实验室名称。 (5)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。 (6)实验类型:是指演示性、操作性、验证性、综合性、设计性。 演示性:教师操作,学生观察,验证理论、说明原理和方法。 操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。 验证性:按实验指导书(教材)要求,由学生通过操作验证所学理论,加深对理论、知识的理解,掌握基本实验知识、方法、技能、数据处理等。 综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多的知识、多种方法,按要求或自拟实验方案进行实验。主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的能力。 设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计缺制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。 3、教师批改学生实验报告要求 (1)批改:全部批改及更正错误。 (2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。 (3)签名及批改日期:任课教师必须在每份学生实验报告中签名和写上批改日期。 (4)成绩:填写学生实验成绩表,实验成绩作为考试成绩评定的依据。

相关文档
相关文档 最新文档