网络主机发现程序

合集下载

简单描述iscsi工作流程

简单描述iscsi工作流程

简单描述iscsi工作流程iSCSI是一种用于在IP网络上传输SCSI命令的协议,它使得远程主机可以通过网络访问存储设备。

iSCSI工作流程包括初始化、发现、登录、传输和终止五个主要阶段。

首先是初始化阶段。

在此阶段,iSCSI初始化器(即发起端)通过初始化器驱动程序发送一个iSCSI请求到目标端的iSCSI引导服务器,请求建立一个iSCSI会话。

初始化器驱动程序负责将本地主机上的SCSI命令转换为iSCSI请求,并将其发送到网络上。

接下来是发现阶段。

在此阶段,目标端的iSCSI引导服务器会回复一个iSCSI响应,其中包含目标端上可用的iSCSI目标设备的信息。

初始化器根据这些信息选择要连接的目标设备。

然后是登录阶段。

在此阶段,初始化器发送一个iSCSI登录请求到目标设备,请求建立一个iSCSI会话。

目标设备通过验证初始化器的身份并分配一个唯一的ISID(iSCSI会话标识符)和TSIH(iSCSI 传输会话标识符)给该会话。

初始化器接受这些标识符,并与目标设备建立起一条逻辑连接。

接着是传输阶段。

在此阶段,初始化器通过iSCSI会话向目标设备发送SCSI命令,目标设备接收并处理这些命令,并将响应发送回初始化器。

传输阶段使用TCP/IP协议,以确保数据的可靠传输。

最后是终止阶段。

在此阶段,初始化器发送一个iSCSI注销请求到目标设备,请求终止当前的iSCSI会话。

目标设备收到注销请求后,终止与初始化器的逻辑连接,并释放该会话使用的资源。

总的来说,iSCSI工作流程包括初始化、发现、登录、传输和终止五个主要阶段。

通过这些阶段,远程主机可以使用iSCSI协议在IP网络上访问存储设备。

iSCSI的优势在于通过使用现有的IP网络基础设施,提供了一种廉价、灵活且易于管理的存储解决方案。

同时,iSCSI也具备与SCSI相似的性能和功能,能够满足大多数存储需求。

网络安全中的漏洞扫描技术的使用方法

网络安全中的漏洞扫描技术的使用方法

网络安全中的漏洞扫描技术的使用方法随着互联网的迅猛发展,人们对网络安全的重视程度也日益增加。

作为网络安全的重要组成部分,漏洞扫描技术是一种通过全面检测和分析网络系统、应用程序和设备中潜在漏洞的方法。

本文将介绍一些常用的漏洞扫描技术以及它们的使用方法,帮助用户更好地保护自己的网络安全。

漏洞扫描技术通过模拟黑客攻击的方法,主动测试系统和应用程序的安全性。

它可以帮助用户发现并修复系统中存在的漏洞,以防止黑客利用这些漏洞获取非法访问权限。

以下是几种常用的漏洞扫描技术的使用方法:1. 主机扫描主机扫描是一种通过扫描网络设备和主机的端口和服务来检测漏洞的方法。

它可以帮助用户发现未关闭的端口以及运行不安全服务的主机。

使用主机扫描技术时,用户需要输入目标主机的IP地址,并选择扫描类型(如快速扫描、完全扫描等),扫描工具将自动识别主机上存在的漏洞,并生成扫描报告。

用户可以根据报告中的信息及时修复漏洞,以提高系统的安全性。

2. Web应用扫描Web应用扫描技术是一种针对网站和Web应用程序进行漏洞检测的方法。

它可以检测常见的Web安全漏洞,如跨站脚本攻击(XSS)、SQL注入攻击等。

在使用Web应用扫描技术时,用户需要输入目标网站的URL,并选择扫描类型,扫描工具将自动对目标网站进行检测,并生成扫描报告。

用户可以根据报告中的漏洞信息,及时修复漏洞以保护网站的安全。

3. 漏洞数据库扫描漏洞数据库扫描技术是一种通过对已知漏洞数据库的查询,检测系统和应用程序中可能存在的漏洞的方法。

用户可以使用漏洞数据库扫描工具,输入目标系统和应用程序的版本号,扫描工具将自动查询漏洞数据库,找出与目标系统和应用程序匹配的漏洞,并生成扫描报告。

用户可以根据报告中的漏洞信息及时更新系统和应用程序,以提高安全性。

4. 恶意软件扫描恶意软件扫描技术是一种通过扫描系统和应用程序中的文件和代码,检测恶意软件的方法。

用户可以使用恶意软件扫描工具,对系统和应用程序进行扫描,并生成扫描报告。

网络资产探测流程

网络资产探测流程

网络资产探测流程
一、初始设定
1.确定探测目标
(1)确定需探测的网络范围
(2)确定探测的具体资产类型
2.配置探测工具
(1)选择合适的探测工具
(2)配置工具参数
二、主机探测
1.扫描活动主机
(1)使用端口扫描工具
(2)确定活跃主机
2.识别操作系统和服务
(1)识别主机的操作系统
(2)列出运行的服务
三、网络设备探测
1.发现网络设备
(1)扫描网络设备
(2)记录设备IP地址
2.确认设备类型
(1)确认设备品牌和型号(2)判断设备功能和服务
四、漏洞扫描
1.执行漏洞扫描
(1)使用漏洞扫描工具
(2)发现系统和应用程序漏洞2.分析漏洞风险
(1)评估漏洞的严重程度(2)制定漏洞修复计划
五、数据采集
1.收集资产信息
(1)收集主机和设备信息(2)记录IP地址和端口信息2.存储数据
(1)建立资产清单
(2)存储探测结果数据
六、结果分析
1.数据比对
(1)比对实际资产与预期资产(2)分析差异和潜在风险
2.生成报告
(1)汇总探测结果
(2)提出改进建议。

Nmap扫描原理与用法

Nmap扫描原理与用法

[+]Nmap扫描原理与用法2012年6月16日1Nmap介绍Nmap基本命令和典型用法•全面进攻性扫描(包括各种主机发现、端口扫描、版本扫描、OS扫描及默认脚本扫描):nmap -A -v targetip•Ping扫描:nmap -sn -v targetip•快速端口扫描:nmap -F -v targetip•版本扫描:nmap -sV -v targetip•操作系统扫描:nmap -O -v targetip2Nmap扫描原理与用法PDF:下载地址Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。

软件名字Nmap是Network Mapper的简称。

Nmap最初是由Fyodor在1997年开始创建的。

随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。

最新版的Nmap6.0在2012年5月21日发布,详情请参见:。

一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。

Nmap 可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。

Nmap的优点:1. 灵活。

支持数十种不同的扫描方式,支持多种目标对象的扫描。

2. 强大。

Nmap可以用于扫描互联网上大规模的计算机。

3. 可移植。

支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植。

4. 简单。

提供默认的操作能覆盖大部分功能,基本端口扫描nmap targetip,全面的扫描nmap –A targetip。

5. 自由。

Nmap作为开源软件,在GPL License的范围内可以自由的使用。

6. 文档丰富。

Nmap官网提供了详细的文档描述。

Nmap作者及其他安全专家编写了多部Nmap 参考书籍。

7. 社区支持。

Nmap背后有强大的社区团队支持。

获取网络中主机实验报告

获取网络中主机实验报告

计算机网络课程设计报告班级:计科141班姓名:xx(20141514112)xx(20141514129)xx(20141514118)题目:发现网络中活动的主机指导教师:xx日期:2016年6月24日发现网络中活动的主机一、问题描述1.设计目的:对于计算机实验室人员以及对宿舍局域网进行网络管理时,常常需要确定当前网络中处于活动状态的主机。

Ping命令利用ICMP回射请求报文和回射应答报文来测试目标系统是否可达。2.设计要求:编制程序,其功能是利用Ping命令通过发送数据包并接收应答信息来检测两台计算机之间的网络是否连通,以获取指定网段中的活动主机,并将结果显示在标准输出上。

二、概要设计1.主流程图:2.子流程图:三、详细设计1、获取本机IP(IpAddress类)package zx.huoquwangluozhuji;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/**** @获取本机IP**/public class IpAddress {public static String getIpAddress() {InputStreamReader isr = null;BufferedReader br = null;String system = System.getProperty("").toUpperCase();try {Process pro = null;if (system.indexOf("WINDOWS") > -1)pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig /all");elseSystem.out.println("不是windows系统");if (pro != null) {isr = new InputStreamReader(pro.getInputStream());br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null) {// System.out.println(line);if (line.indexOf("IP Address") > -1) {int beginIndex = stIndexOf(":") + 2;int endIndex = line.length();line = line.substring(beginIndex, endIndex);return line;} else if (line.indexOf("IPv4 地址") > -1) {int beginIndex = stIndexOf(":") + 2;int endIndex = line.length() - 5;line = line.substring(beginIndex, endIndex);return line;}}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (br != null)br.close();if (isr != null)isr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return "err";}}2、获取活动的主机(GetActivetyName类)package zx.huoquwangluozhuji;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/**** @获取网络中活动的主机**/public class GetActivityName extends Thread {private int startIP, endIP;private String IPHead;public GetActivityName(String IPHead, int startIP, int count) {// TODO Auto-generated constructor stubthis.IPHead = IPHead;this.startIP = startIP;this.endIP = startIP + count;}public void run() {for (int i = startIP; i <= endIP; i++) {if (i > 255)break;String ip = IPHead + "." + i;InputStreamReader isr = null;BufferedReader br = null;String system = System.getProperty("").toUpperCase();Process pro = null;try {pro = null;if (system.indexOf("WINDOWS") > -1) {pro = Runtime.getRuntime().exec("cmd.exe /c ping " + ip);} else {System.out.println("不是windows系统");}if (pro != null) {isr = new InputStreamReader(pro.getInputStream());br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null) {if (line.indexOf("TTL") > 0) {System.out.println(ip + "在线");break;}if (line.indexOf("超时") > 0 || line.indexOf("无法") > 0) {break;}}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {if (br != null)br.close();if (isr != null)isr.close();if (pro != null)pro.destroy();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}3、开始(Start类)package zx.huoquwangluozhuji;public class Start {private static int COUNT = 3;public static void main(String[] args) {// TODO Auto-generated method stubString ip = IpAddress.getIpAddress();String[] temp = ip.split("\\.");new Start();System.out.println("----------该网络中活动的主机----------");for (int i = 1; i <= 255; i = i + COUNT) {ip = temp[0] + "." + temp[1] + "." + temp[2];new GetActivityName(ip, i, COUNT - 1).start();}}public Start() {// TODO Auto-generated constructor stubdoShutdownWork();}private void doShutdownWork() {Runtime runtime = Runtime.getRuntime();runtime.addShutdownHook(new Thread() {public void run() {System.out.println("------------结束------------");}});}}四、系统的运行结果(系统的使用方法介绍)1、运行要求:1)、系统环境操作系统WindowsXP或以上2)、软件环境 JDK 1.72、系统的使用方法:在同一局域网内,运行Start程序,就可以获取网络中正在活动的主机。

nmap使用手册

nmap使用手册

Nmap使用手册1. nmap介绍Nmap是一款网络扫描和主机检测的非常有用的工具。

Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。

它可以适用于winodws,linux,mac等操作系统Nmap是一款非常强大的实用工具,可用于:检测活在网络上的主机(主机发现)检测主机上开放的端口(端口发现或枚举)检测到相应的端口(服务发现)的软件和版本检测操作系统,硬件地址,以及软件版本检测脆弱性的漏洞(Nmap的脚本)Nmap是一个非常普遍的工具,它有命令行界面和图形用户界面。

本人包括以下方面的内容:介绍Nmap扫描中的重要参数操作系统检测Nmap使用教程Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP 反弹扫描等。

所有这些扫描的类型有自己的优点和缺点,我们接下来将讨论这些问题。

Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。

我们需要使用一些先进的技术来绕过防火墙和入侵检测/防御系统,以获得正确的结果。

Nmap自动判断主机存活。

2.nmap基本的命令和用法的例子2。

1 扫描单一的一个主机:#nmap 192.168.1。

22.2 扫描整个子网:#nmap 192.168。

1.1/242。

3 扫描多个目标:#nmap 192。

168。

1。

2 192。

168.1。

52。

4 扫描一个范围内的目标:#nmap 192.168。

1。

1—100 (扫描IP地址为192。

168。

1.1—192.168。

1。

100内的所有主机)2.5 如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机:#nmap —iL target.txt2。

6 如果你想看到你扫描的所有主机的列表:#nmap —sL 192。

168。

1.1/242.7 扫描除过某一个ip外的所有子网主机:#nmap 192。

发现网络中的活动主机--计算机网络课程设计

发现网络中的活动主机--计算机网络课程设计

计算机网络课程设计一、设计内容及设计要求1.1课程设计内容:利用ICMP数据包,通过使用ICMP的回送和回送响应消息来确定当前网络中处于活动状态的主机,即ping消息的请求和应答,将发送的ICMP的数据包类型设置为回送请求(类型号为8),并显示在标准输出上。

用命令行形式运行:scanhost Start_IP End_IP,其中scanhost 为程序名;Start_IP为被搜索网段的开始IP;End_IP为被搜索网段的结束IP地址。

1.2课程设计目的:IP协议的优点是简单,但缺少差错控制和查询机制,而网际控制报文协议(ICMP具有补充IP功能的作用。

在网络管理中,常常要确定当前网络在红处于活动状态的主机,这时可以通过ICMP的回送和回送响应消息来完成这项工作。

这课程设计的目的就是编制程序,利用ICMP数据包,发现网络中的活动主机,即ping消息的请求和应答。

通过课程设计,熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识,培养综合运用网络知识解决实际问题能力。

1.3课程设计要求:设计程序,其功能是发送ICMP数据包,以获取指定望段中的活动主机,并将结果显示在标准输出设备上程序的具体要求如下:1.用命令形式运行scanhost为程序名;start_ip为被搜索网段;end_ip为被搜索网段的结束IP地址。

如在命令行输入scanhost 192.168.0.1 192.168.0.1002.输出格式活动主机1的IP地址活动主机2的IP地址活动主机n的IP地址二、总体设计2.1设计原理首先对ICMP报文的格式有一定的了解,ICMP报文是在IP数据报内部传输的,其结构如图所示:ICMP报文的格式如图所示:0 7 8 15 16 31(位)所有报文的前4个字节都是一样的,但是其它字节则互不相同。

其中类型字段可以有15个不同的值,以描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值来进一步描述不用的条件。

使用ARP发现局域网内活动主机

使用ARP发现局域网内活动主机

一课程设计名称:使用ARP发现局域网内活动主机——自行构造、发送ARP请求数据帧二使用工具软件:Microsoft Visual C++;winpcap;三课程设计内容简介:1 课程设计中涉及的网络基本理论简介:(1)在网际协议中定义的是因特网的IP地址,但在实际进行通信时,物理层不能识别IP地址只能识别物理地址。

因此,需在IP地址与物理地址之间建立映射关系,地址之间的这种映射称为地址解析。

(2)以太网网络中的物理地址即网卡的序列号。

IEEE规定网卡序列号为6个字节(48位),前三个字节为厂商代号,由于厂商向IEEE注册登记申请,后3个字节为网卡的流水号。

(3)地址解析包括从IP地址到物理地址的映射和从物理地址到IP地址的映射。

TCP/IP协议组提供了两个映射协议:地址解析协议ARP和逆向地址解析协议RARP。

ARP用于从IP地址到物理地址的映射,RARP用于从物理地址到IP地址的映射。

(4)地址解析协议的ARP的工作原理:假定在一个物理网络上,A(源主机)要与D(目的主机)进行通信,但是不知道D的物理地址。

A利用ARP协议工作的过程如下:A广播一个ARP请求报文,请求IP地址为IPD的主机回答其物理地址。

网上所有主机都能收到该ARP请求,并将本机IP地址与请求的IP 地址比较,D主机识别出自己的地址IPD,并作出回应,通报自己的物理地址。

A收到这个ARP回应包后,就可以与D进行通信。

为了提高效率,ARP协议使用了高速缓存技术。

在每台使用ARP的主机中,都保留了一个专用的内存区,一收到ARP应答,主机就将获得的IP地址和物理地址存入缓存。

以后每次要发送报文时,首先到缓存中查找有无相应的项,若找不到,再利用ARP进行地址解析。

由于多数网络通信都要连续发送多个报文,所以高速缓存大大提高ARP的效率。

在ARP请求报文中还放入源主机的“IP地址——物理地址”的地址对,源主机在广播ARP请求时,网络上所有主机都可以知道该源主机的“IP地址——物理地址”的地址对并将其存入自己的缓存。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#pragma pack(4)#pragma comment(lib,"Ws2_32.lib")#define win32_LEAN_AND_MEAN#include <winsock2.h>#include <stdio.h>#include <iostream.h>#include <string.h>#include <stdlib.h>#include <sys/timeb.h>#include <time.h>//THE IP HEADERtypedef struct iphdr{unsigned int headlen:4; //ip头长度unsigned int wersion:4; //ip版本号unsigned char tos; //服务类型unsigned short totallen; //ip包总长度unsigned short id; //ip号unsigned short flag; //标记unsigned char ttl; //生存时间unsigned char prot; //协议(UDP TCP)unsigned short checksum; //校验和unsigned int sourceip; //源ipunsigned int destip; //目的ip}IpHeader;//ICMP HEADERtypedef struct icmphdr{BYTE type; //icmp类型码,回送请求的类型码为8BYTE code; //子类型码,保存与特定ICMP报文类型相关的//节信息USHORT checksum; //校验和USHORT id; //ICMP报文id号USHORT seq; //ICMP数据报的序列号}Icmpheader;#define ICMP_ECHO 8 //请求回送#define ICMP_ECHO_REPLY 0 //请求回应#define ICMP_MIN 8 //ICMP包头长度(最小ICMP包长度)#define STA TUS_FAILED 0xFFFF //错误码#define DEF_PACKET_SIZE 32 //缺省数据报长度#define MAX_PACKET 1024 //最大数据报长度#define MAX_PING_PACKET_SIZE (MAX_PACKET + sizeof(IpHeader)) //最大接受数据报长度void fill_icmp_date(char * ,int); //填充ICMP包USHORT checksum(USHORT *,int); //校验和函数void decode_resp(char*,int,struct sockaddr_in *); //找到此数据报IP地址DWORD WINAPI FindIp(LPVOID pipaddrtemp); //线程调用子函数WSADA TA wsadata;SOCKET sockraw;struct sockaddr_in dest,from,end;int fromlen=sizeof(from);char * recvbuf=new char[MAX_PING_PACKET_SIZE];unsigned int addr=0;long threadnumcounter=0,threadnumlimit=20;long *aa=&threadnumcounter;void main(){char *in_ip="192.168.0.1";char *end_ip="192.168.0.10";cout<<"请输入起始扫描地址,和终止扫描地址,格式"<<endl<<"IP1"<<endl<<"IP2"<<endl;if(WSAStartup(MAKEWORD(2,1),&wsadata)!=0){/*对Winsock服务的初始化*/ cout<<"WSAStartup failed:"<<GetLastError()<<endl;ExitProcess(STA TUS_FAILED);}//创建原始套接字sockraw=WSASocket(AF_INET,SOCK_RA W,IPPROTO_ICMP,NULL,0,WSA_FLAG_OV ERLAPPED);//创建一个与指定传送服务提供者捆绑的套接口,可选地创建和/或加入一个套接口组if(sockraw==INV ALID_SOCKET){cout<<"WSASocket() failed:"<<WSAGetLastError()<<endl;ExitProcess(STA TUS_FAILED);}//设置读取延时int timeout=1000;intbread=setsockopt(sockraw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));//s etsockopt()函数用于任意类型、任意状态套接口的设置选项值if(bread==SOCKET_ERROR){cout<<"fail to set recv timeout:"<<WSAGetLastError()<<endl;ExitProcess(STA TUS_FAILED);}memset(&dest,0,sizeof(dest));//将dest中的N 个字节替换成“0”,起清零作用unsigned long startip,endip;dest.sin_family=AF_INET;dest.sin_addr.s_addr=inet_addr(in_ip);startip=inet_addr(in_ip);end.sin_family=AF_INET;end.sin_addr.s_addr=inet_addr(end_ip);endip=inet_addr(end_ip);HANDLE hthread;while(htonl(startip)<=htonl(endip)){//将主机的无符号长整形数转换成网络字节顺序。

if(threadnumcounter>threadnumlimit){Sleep(5000);continue;}DWORD Threadid;sockaddr_in * pipaddrtemp=new(sockaddr_in);if(!pipaddrtemp){cout<<"memory alloc failed"<<endl;return;}*pipaddrtemp=dest;//创建新线程clock_t start;start=clock();hthread=CreateThread(NULL,NULL,FindIp,(LPVOID)pipaddrtemp,NULL,&Threadid);//CreateThread(线程安全属性,堆栈大小, 线程函数,线程参数, 线程创建属性,线程ID )long i=60000000L;while(i--);TerminateThread(hthread,0);/*在线程外终止一个线程,用于强制终止线程*/InterlockedDecrement(aa);//递减指定变量的值并存储结果memset(&from,0,sizeof(from));startip=htonl(htonl(startip)+1);dest.sin_addr.s_addr=startip;}while(threadnumcounter!=0){Sleep(2000);return;}}void fill_icmp_data(char * icmp_data,int datasize){Icmpheader *icmp_hdr;char *datapart;icmp_hdr=(Icmpheader*)icmp_data;icmp_hdr->type = ICMP_ECHO;icmp_hdr->id=(USHORT)GetCurrentThreadId();datapart=icmp_data+sizeof(Icmpheader);memset(datapart,'A',datasize-sizeof(Icmpheader));}void decode_resp(char *buf,int bytes,struct sockaddr_in *from){ IpHeader *iphdr;Icmpheader *icmphdr;unsigned short iphdrlen;iphdr=(IpHeader *)buf;;//从buf中获取IP数据包头指针iphdrlen=iphdr->headlen * 4;icmphdr=(Icmpheader *)(buf+iphdrlen);//定位ICMP包头起始位置//数据包太短丢弃if(bytes<iphdrlen+ICMP_MIN) return;if(icmphdr->type!=ICMP_ECHO_REPLY) return;if(icmphdr->id!=(USHORT)GetCurrentThreadId()) return;{cout<<"活动主机"<<inet_ntoa(from->sin_addr)<<endl;}}USHORT checksum(USHORT *buffer,int size){unsigned long cksum=0;while (size>1){cksum+=*buffer++;size-=sizeof(USHORT);}if(size){cksum+=*(UCHAR*)buffer;}cksum=(cksum>>16)+(cksum & 0xffff);cksum+=(cksum>>16);return (USHORT)(~cksum);}DWORD WINAPI FindIp(LPVOID pipaddrtemp){InterlockedIncrement(aa);char icmp_data[MAX_PACKET];memset(icmp_data,0,MAX_PACKET);int datasize=DEF_PACKET_SIZE;datasize+=sizeof(Icmpheader);fill_icmp_data(icmp_data,datasize);((Icmpheader*)icmp_data)->checksum=0;((Icmpheader*)icmp_data)->seq = 0;//计算校验和后填入((Icmpheader*)icmp_data)->checksum=checksum((USHORT*)icmp_data,datasize);int bwrote=sendto(sockraw,icmp_data,datasize,0,(struct sockaddr*)pipaddrtemp,sizeof(dest));//将指定字节数的数据发送到指定的终结点//sendto(套接字;待发送数据的缓冲区;缓冲区长度;调用方式标志位一般为0,改变Flags 将会改变Sendto发送的形式;(可选)指针,指向目的套接字的地址;所指地址的长度)int n=0;if (bwrote==SOCKET_ERROR){if(WSAGetLastError()==WSAETIMEDOUT){cout<<"timed out"<<endl;}cout<<"sendto failed: "<<WSAGetLastError()<<endl;ExitProcess(STA TUS_FAILED);n=1;}if(bwrote<datasize){cout<<"worte "<<bwrote<<" bytes"<<endl;ExitProcess(STA TUS_FAILED);n=1;}int bread =recvfrom(sockraw,recvbuf,MAX_PING_PACKET_SIZE,0,(struct sockaddr*) &from,&fromlen);//recvfrom(套接口的描述字,接收数据缓冲区,缓冲区长度,指向装有源地址from的缓冲区,from缓冲区长度,)if(bread==SOCKET_ERROR){if(WSAGetLastError()==WSAETIMEDOUT){cout<<"time out"<<endl;}cout<<"recvform failed:"<<WSAGetLastError()<<endl;ExitProcess(STA TUS_FAILED);n=1;}if(n==0)decode_resp(recvbuf,bread,&from);InterlockedDecrement(aa);return 0;}。

相关文档
最新文档