主机端口扫描程序设计
- 格式:doc
- 大小:154.00 KB
- 文档页数:19
表 1 目标主机不同设置情况下的扫描结果1.引言由于每一个端口都对应了相应的服务, 支持 IP_HDRINCL 选项的设置。
扫描程序界面如图 1 所示。
TCP Connect()扫描由于不需 要 使 用 原 始 套 接 字 实 现 , 需单 独构造一个扫描线程实现, 其扫描数据包的发送过程为: 声明一 个套接字, 设置套接字选项, 设置套接字为非阻塞, 调用 connect 所以某一端口开放 也就意味着其对应的服务也在运行。
利用端口扫描的结果, 我们 可以掌握主机的运行状况, 帮助我们判断有没有后门程序在运 行, 关闭不需要的服务等提供条件。
当然, 黑客通过端口扫描也 可以发现系统的弱点, 为进一步进行攻击提供条件。
本文使用 V C6.0 作为编程工具, 在 Windows2000 平台下, 使 用 Windows 原始套接字实现带有特殊标志字段数据包的产生、 发送, 并实现对目标主机响应数据包的嗅探。
利用数据包嗅探过 程分析俘获到的响应数据包, 得到 TCP 数据单元头部的六个 1 位标志字段的内容。
通过对已知目标主机的端口状态及其响应 的分析, 进而得到一些规律, 应用这些规律可以进一步帮助我们判断目标主机端口是否开放。
2. TCP 端口扫描原理 2.1 TCP 实现原理 函数。
该扫描过程主要应用了 TCP Connect () 函数实现, connect 函数返回值判断目标端口是否开放。
根据 原始套接字扫描是一种比较复杂的扫描过程, 需要手动设 置 TCP 和 IP 的 头 部 字 段 。
Windows 系统 下 Windows2000 或 WindowsXP/S erver 2003 支持原始套接字。
构造并发送原始套接 字扫描过程如下: 声明一个原始套接字, 设置 IP_HDRINCL 选项 以构造 TCP 和 IP 的头部字段, 填充套接字 IP 首部( 在这里将目 标主机 IP 填入) , 填充 TCP 首部( 在这里将目标主机端口填入) , 计算校验和, 发送数据包。
Nmap简单扫描过程目录一、主机发现(HOST DISCOVERY) (2)1.探测局域网内活动主机 (2)二、端口扫描 (4)1.半开放扫描(TCP SYN S CANNING) (4)2.TCP CONNECT SCANNING (4)3.TCP ACK SCANNING (4)4.TCP FIN/X MAS/NULL SCANNING (4)5.UDP SCANNING (4)6.其他方式 (4)三、版本侦测 (4)1.版本侦测主要分为以下几个步骤: (5)四、操作系统侦测 (5)1.实现方式如下 (5)一、主机发现(Host Discovery)用于发现目标主机是否在线(Alive,处于开启状态)。
原理:与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。
1.探测局域网内活动主机例子1:扫描局域网192.168.1.100-192.168.1.120范围内哪些IP的主机是活动的。
命令:nmap –sn 192.168.31.100-254Starting Nmap 6.46 ( ) at 2015-06-01 17:07 CSTNmap scan report for 192.168.31.101Host is up (0.00028s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer)Nmap scan report for 192.168.31.102Host is up (0.00088s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.110Host is up (0.00047s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.157Host is up (0.00052s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.158Host is up (0.00096s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.161Host is up (0.00045s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.163Host is up (0.00027s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.165Host is up (0.00036s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.180Host is up (0.00085s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer)Nmap scan report for 192.168.31.202Host is up (0.0011s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.205Host is up (0.00074s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.209Host is up (0.00046s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for (192.168.31.111)Host is up.Nmap done: 155 IP addresses (13 hosts up) scanned in 1.14 seconds例子2:扫描局域网192.168.31.0网段下哪些IP的主机是活动的命令:nmap -sn 192.168.31.0/24Starting Nmap 6.46 ( ) at 2015-06-01 17:35 CSTNmap scan report for 192.168.31.1Host is up (0.014s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.5Host is up (0.0010s latency).MAC Address: 00:0C:29:BD:8B:91 (Realtek Semiconductor)Nmap scan report for 192.168.31.6Host is up (0.00098s latency).MAC Address: 00:0C:29:BD:8B:91 (Lanner Electronics)Nmap scan report for 192.168.31.8Host is up (0.00094s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.9Host is up (0.00080s latency).MAC Address: 00:0C:29:BD:8B:91 (Lanner Electronics) Nmap scan report for 192.168.31.25Host is up (0.00057s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.26Host is up (0.00056s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.27Host is up (0.00060s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer) Nmap scan report for 192.168.31.37Host is up (0.00040s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.40Host is up (0.00072s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.49Host is up (0.00042s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.63Host is up (0.00056s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.80Host is up (0.0017s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.81Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.82Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.83Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.90Host is up (0.0016s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.101Host is up (0.00036s latency).MAC Address: 00:0C:29:BD:8B:91 (Super Micro Computer) Nmap scan report for 192.168.31.102Host is up (0.00052s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.105Host is up (0.00037s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.110Host is up (0.00092s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.157Host is up (0.00067s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.158Host is up (0.00082s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.161Host is up (0.00060s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.163Host is up (0.00047s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.165Host is up (0.00054s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.180Host is up (0.00064s latency).MAC Address: 00:0C:29:BD:8B:91 (Asustek Computer)Nmap scan report for 192.168.31.202Host is up (0.00067s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.205Host is up (0.00061s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for 192.168.31.209Host is up (0.00049s latency).MAC Address: 00:0C:29:BD:8B:91 (VMware)Nmap scan report for (192.168.31.111)Host is up.Nmap done: 256 IP addresses (31 hosts up) scanned in 1.33 seconds二、端口扫描用于确定目标主机的TCP/UDP端口的开放情况1.半开放扫描(TCP SYN Scanning)该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么判断端口是开放的;如果收到RST包,说明该端口是关闭的。
课程设计题目:端口扫描程序设计院、系:计算机科学与技术学院网络工程系班级:学号:姓名:同组成员:指导教师:成绩:一.系统设计的目标:扫描器是网络信息收集的一种方法,从功能上可分为漏洞扫描器和端口扫描器。
通过此次课程设计,能够掌握漏洞、端口的基础知识,掌握扫描器的基本原理并设计实现端口扫描和漏洞扫描程序。
二.系统原理:常用的端口扫描技术有以下几种:2.1 TCP connect()扫描:2.1.1简介:这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。
如果端口处于侦听状态,那么connect()就能成功。
否则,这个端口是不能用的,即没有提供服务。
2.2.2优点:不需要任何权限。
系统中的任何用户都有权利使用这个调用。
另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。
使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。
2.2.3 缺点:很容易被察觉,并且被防火墙将扫描信息包过滤掉。
目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。
2.2 TCP SYN扫描:2.2.1简介:这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP 连接。
扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。
一个SYN|ACK的返回信息表示端口处于侦听状态:返回RST表示端口没有处于侦听态。
如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。
2.2.2优点:一般不会在目标计算机上留下记录。
2.2.3缺点:必须要有root权限才能建立自己的SYN数据包。
2.3 TCP FIN 扫描:2.3.1简介:SYN扫描虽然是“半开放”方式扫描,但在某些时候也不能完全隐藏扫描者的动作,防火墙和包过滤器会对管理员指定的端口进行监视,有的程序能检测到这些扫描。
计算机网络课程设计论文题目:简单端口扫描程序的实现院(部)名称:计算机科学与工程学院学生姓名:专业:学号:指导教师姓名:报告提交时间:报告答辩时间:(不填)目录一、设计要求 (3)二、开发环境与工具 (3)三、设计原理 (3)四、系统功能描述及软件模块划分 (3)五、设计步骤 (5)六、关键问题及其解决方法 (5)七、设计结果 (15)八、软件使用说明 (16)九、参考资料 (16)一、设计要求本系统实现了一个简单的端口扫描器。
1. 使用端口扫描对一台主机进行扫描.一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描.显示出一个网段内有哪些主机是开机的。
二、开发环境与工具Windows的pc机Jdk包.:具备网络环境并连入Internet。
三、设计原理IP地址和端口被称作套接字.它代表一个TCP连接的一个连接端。
为了获得TCP服务.必须在发送机的一个端口上和接收机的一个端口上建立连接。
TCP连接用两个连接端来区别.也就是(连接端1.连接端2)。
连接端互相发送数据包。
端口扫描是在应用程序运行在 TCP 或者 UDP 协议之上工作的, 这些协议是众多应用程序使用的传输机制,端口扫描是通过扫描主机确定哪一些 TCP 和UDP 端口可以访问的过程. 端口扫描常见的几种类型: TCP Connect()扫描 SYN 扫描 NULL 扫描 ACK 扫描 Xmas-Tree Dumb 扫描。
Ping命令经常用来对TCP/IP网络进行诊断。
通过目标计算机发送一个数据包.让它将这个数据包反送回来.如果返回的数据包和发送的数据包一致.那就是说你的PING命令成功了。
通过这样对返回的数据进行分析.就能判断计算机是否开着.或者这个数据包从发送到返回需要多少时间。
Tracert命令用来跟踪一个消息从一台计算机到另一台计算机所走的路径. rusers和finger 通过这两个命令.你能收集到目标计算机上的有关用户的消息。
端口扫描程序的设计与实现端口扫描程序的设计与实现1. 简介端口扫描程序是一种用来探测目标主机开放的网络端口的工具。
它通过向目标主机发送特定的网络消息,然后根据返回的消息判断该端口是否开放。
2. 设计思路2.1 输入端口扫描程序的输入通常包括目标主机的IP地质和要扫描的端口范围。
2.2 扫描过程扫描程序通过创建一个或多个线程来并发地扫描目标主机。
每个线程都会尝试连接目标主机的一个端口,并等待一段时间来判断端口是否开放。
如果端口开放,则将其记录下来。
2.3 输出扫描完成后,程序会将扫描结果输出到一个文件中。
每行记录一个开放的端口信息,包括目标主机的IP地质和开放的端口号。
3. 实现3.1 编程语言端口扫描程序可以用各种编程语言来实现,如、Java、C等。
选择合适的语言取决于开发者的个人喜好和实际需求。
3.2 网络连接程序需要使用Socket库来进行网络连接。
通过建立TCP连接或发送UDP消息来目标主机的端口状态。
3.3 多线程为了提高扫描速度,可以使用多线程来并发地扫描目标主机的端口。
每个线程独立地连接一个端口并等待返回消息。
3.4 错误处理在程序运行过程中可能会遇到各种错误,如网络连接失败、目标主机不可达等。
为了使程序具备鲁棒性,需要对这些错误进行适当的处理。
4. 特点与应用4.1 特点端口扫描程序可以用于检测目标主机的安全性,找出可能的漏洞和攻击面。
程序具备高效、快速、并发的特点,能够在短时间内扫描大量的端口。
4.2 应用网络管理员可以使用端口扫描程序来评估网络的安全性。
渗透人员可以利用端口扫描程序来发现目标主机的弱点。
系统管理员可以使用端口扫描程序来查找网络中的活跃主机和开放端口。
以上是端口扫描程序的设计与实现的简要介绍。
希望对您有所帮助!。
端口扫描6.3.1 背景描述“端口”在计算机和网络领域中是个非常重要的概念。
它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的接口,如USB端口、网卡端口等,或者交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等。
这里所说的端口指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。
端口号是一个16bit的二进制数,用于标示不用作用的端口。
端口号分为系统默认端口号和一般端口号。
系统默认端口号由因特网指派名字和号码公司ICANN负责分配给一些常用的应用程序固定使用的熟知端口,其数值从0-1023;一般端口号则是指1024-65535这些数值。
端口扫描就是对一段端口或指定的端口进行扫描。
其基本原理是使用TCP/IP协议向远程目标主机的某一端口提出建立一个连接的请求并记录目标系统的应答,从而判断出目标系统端口的开关状态。
常用的端口扫描技术有如下几种:1.TCP connect()扫描。
系统调用connect(),向目标端口发送一个SYN数据包,等待目标机器反应。
如果目标机器返回的是SYN/ACK数据包,证明目标端口处于监听状态,发送ACK数据包;如果返回的是RST/ACK数据包,说明目标端口关闭,发送RESET数据包,完成三次握手。
2.TCP SYN 扫描。
这项技术通常称为半开扫描(half-open),发送一个SYN数据包到目的端口,等待响应,如果收到SYN|ACK(应答),表明该端口是开放监听的。
收到RST则代表该端口未被监听。
如果收到SYN|ACK的响应,则马上发送一个RST包来中断这个连接。
3.TCP FIN扫描。
向目标端口发送FIN数据包,按照rfc793,目标系统应该给所有关闭着的端口返回一个RST数据包。
4.XMAS扫描。
也称圣诞树扫描,将TCP的首部含有的六个标志位(URG、ACK、PSH、RST、SYN和FIN)都置为1,按照rfc793,目标系统应该给所有关闭着的端口发送一个RST 包。
端口扫描程序的设计与实现
端口扫描程序的设计与实现
简介
设计目标
端口扫描程序的设计目标如下:
快速:能够在最短的时间内扫描目标主机上的所有端口。
精确:能够准确判断目标主机上端口的开放与关闭状态。
轻量:具有较小的资源占用,不会对目标主机和网络造成过多负担。
可扩展:能够灵活扩展功能,满足不同场景下的需求。
设计思路
端口扫描程序的设计思路如下:
1. 确定目标主机:输入目标主机的IP地质或域名。
2. 确定扫描范围:指定要扫描的端口范围,默认为常用端口范围。
3. 并发扫描:使用多个线程扫描目标主机上的端口,提高扫描效率。
4. 端口连接:针对每个要扫描的端口,尝试建立TCP连接,判断端口是否开放。
5. 扫描结果展示:将扫描结果以可读的方式输出,包括开放的端口和关闭的端口。
实现步骤
端口扫描程序的实现步骤如下:
1. 解析参数:根据命令行参数解析目标主机和端口范围。
2. 并发扫描:创建多个线程,并发执行端口扫描任务。
3. 端口扫描:每个线程负责扫描指定范围内的端口,并判断端口是否开放。
4. 扫描结果:将扫描结果保存到一个数据结构中,包括开放的端口和关闭的端口。
实现工具
端口扫描程序可以使用语言实现,借助的socket库可以进行网络连接,使用的多线程库可以实现并发扫描。
示例代码
以下是一个简单的端口扫描程序的示例代码:
import socket
import threading target_host = \。
主机端口扫描程序设计摘要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。
端口扫描技术是发现安全问题的重要手段之一。
本程序是在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引言1.1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。
入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口”。
端口扫描是入侵者搜索信息的几种常用方法之一,也正是这一种方法最容易暴露入侵者的身份和意图。
一般说来,扫描端口有以下目的:判断目标主机上开放了哪些服务判断目标主机的操作系统如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。
而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。
1.2 端口扫描现状计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。
端口扫描技术是发现安全问题的重要手段之一。
一个端口就是一个潜在的通信通道,也就是一个入侵通道。
对目标计算机进行端口扫描,能得到许多有用的信息。
扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息,从而发现目标机的某些内在的弱点。
2系统设计2.1 系统主要目标本程序主要实现了:简易的TCP connect()扫描,支持多线程;UDP扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;2.2 开发环境及工具测试平台:Windows XP Professional使用软件:Visual C++ 6.0开发语言:C语言2.3 功能模块与系统结构作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。
对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程IP的系统服务端口进行扫描。
有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。
所以,对于选择性地对端口进行扫描也非常重要。
这当然也是扫描程序需要实现的功能之一。
用户在等待扫描的时候,往往希望知道它的工作进度。
这样用户可以更好地控制自己的操作。
站在用户的角度思考,设置进度是程序需要完成的,这样就能知道程序扫描的进度。
系统必须提供的服务是功能需求的基本,本着站在用户角度思考的原则,做出如上叙述需求,从简列举如下:扫描功能;地址选择功能;端口选择功能;进度显示功能;端口扫描程序功能模块如下图所示:程序运行流程图:3系统功能程序设计本程序主要实现了简易的TCP connect()扫描和UDP扫描功能,对TCP扫描支持多线程扫描,UDP扫描仅支持单线程。
3.1 获取本机IP首先使用winsock中的gethostname()函数获取本地主机的标准主机名,再使用函数gethostbyname()主机名字和地址信息的hostent结构指针,最后通过inet_ntoa()函数将地址转化为字符形式返回给主调函数。
if( gethostname(szHostName, 128) == 0 ){pHost = gethostbyname(szHostName);for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ ){/*对每一个IP地址进行处理*/pszAddr = inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);break;}}3.2 分割字符串函数的实现由于扫描结果是使用静态字符串保存的,所以最后显示的时候,需要用到分割字符串函数,来将字符串中扫描出的端口号分离出来显示。
本函数主要是通过Find()函数来查找用作分隔符的字符串在待查找的字符串中的位置,然后通过Add()函数将分隔符之间的字符保存进数组中,来达到分割字符的目的。
while( -1 != pos ){if( -1 == pre_pos )pos = source.Find(division,pos);elsepos = source.Find(division,(pos+1));if( -1 == pre_pos ) {iFirst = 0;if( -1 == pos )nCount = source.GetLength();elsenCount = pos;} else{iFirst = pre_pos+len;if( -1 != pos )nCount = pos - pre_pos - len;elsenCount = source.GetLength()-pre_pos-len;}dest.Add(source.Mid(iFirst,nCount));pre_pos = pos;}3.3 获取待扫描的IP地址通过判断选择的哪个Radio Button的值,来选择从对应的IP Address控件中读入用户输入的值,若是单个的IP则将开始地址StartAddr和结束地址EndAddr都赋值为IP Address控件的值;若是IP范围,则第一个IP地址赋值给StartAddr,最后一个IP 地址赋值给EndAddr。
void CPortScanDlg::setAddr(DWORD& StartAddr,DWORD& EndAddr){switch(m_conf_IP.m_IP){case 0:m_conf_IP.m_IP_Self.GetAddress(StartAddr);m_conf_IP.m_IP_Self.GetAddress(EndAddr);break;case 1:m_conf_IP.m_IP_Design.GetAddress(StartAddr);m_conf_IP.m_IP_Design.GetAddress(EndAddr);break;case 2:m_conf_IP.m_IP_Start.GetAddress(StartAddr);m_conf_IP.m_IP_End.GetAddress(EndAddr);break;default:break;}}3.4 获取待扫描的端口号首先读入用户设置的允许的最大线程数。
再通过判断选择的哪个Radio Button的值,来选择从对应的Edit Box控件中读入用户输入的值。
若是指定的端口号,则循环读入Edit Box中的端口号 (一个端口号占用一行,一次读入一行),每行的字符不超过9字符,再在读入的每行字符的末尾添加字符串结束标记’\0’,再通过atoi()函数把字符型转换为整型,存放在定义的数组结构中,并保存端口号的总个数。
若是端口范围,则第一个端口号的值和最后一个端口号的值分别读入存放在定义的结构体中。
void CPortScanDlg::setPort(tag_PORTS *pScanParam,int& ThreadNum){ThreadNum=m_conf_Port.m_ThreadNum;switch(m_conf_Port.m_Port){case 0:{short nCount = 0;char buff[10];for(int i=0; i<m_conf_Port.m_DesignPort.GetLineCount(); i++){int len = m_conf_Port.m_DesignPort.GetLine(i, buff, 9);if (len != 0){buff[len] = '\0';pScanParam->nArrOfPorts[nCount++]= atoi(buff);}}pScanParam->nCount = nCount;pScanParam->bSepecifiedPort=0;break;}case 1:pScanParam->bSepecifiedPort=1;pScanParam->iStartPort=m_conf_Port.m_StartPort;pScanParam->iEndPort=m_conf_Port.m_EndPort;break;default:break;}3.4.1 指定端口号的初始化首先试着读取DefaultPorts.txt文件中保存的端口号,若读入成功,则显示该文本文档中保存的值;若该文件不存在或读入异常,则显示默认设置的值。