网络Ping命令设计PPT
常用网络工具的使用PPT课件
![常用网络工具的使用PPT课件](https://img.taocdn.com/s3/m/d0b42d949e31433238689322.png)
arp 地址解析协议
原理:arp 即地址解析协议, 在常用以太或令牌 LAN上, 用于实现第三层到第二层地址的转换: IP---->MAC
– 请求者广播 – 符合的节点应答
功能: 显示和修改IP 地址与MAC地址的之间映射。
arp 地址解析协议(windows平台)
常用参数:
– arp -a:显示所有的arp表项 –例
掌握路由器软件升级工具
– TFTP
熟悉协议分析软件使用
– NetXray – Fluke等等
ping 简介
原理:ping的思想与发出一个短促的雷达波, 通过 收集回波来判断目标很相似。即源站点向目的主机 发出icmp request 报文, 目的主机收到后回icmp reply报文。这样就验证了两个节点之间层IP的可达 性—— 网络层是连通的。 功能: 用ping来判断两个节点在网络层的连通性
w waittime] host – 测试主机的可到达性和网络的连通性。 – 常用参数:
• -f 置DF(报文不分片)位。如果用户要求发送的报文大于路径MTU, 报文会被路径上的路由器丢弃,并向源主机发送ICMP出错报文。如 果发现网络性能问题,可能是由于其中的一个节点配置了较小的 MTU。可以使用这个选项确定路径上的最小MTU。缺省பைடு நூலகம்不置位。
计算机网络管理基础
为什么要使用网络工具
熟练的利用各种网络工具进行网络分析是每 一个数据通信工程师的基本技能
– 网络规模越来越大 – 网络环境更加复杂 – 日常网络维护经常使用 – 深入理解协议的手段
常用的网络工具 有哪些
熟练使用基本的网络命令
– ping – arp – tracert(traceroute) – route
ping命令详解(图文)
![ping命令详解(图文)](https://img.taocdn.com/s3/m/67448333443610661ed9ad51f01dc281e53a56d2.png)
ping命令详解(图文)Ping1、P ing的基础知识Ping 是一个十分好用的TCP/IP工具。
[功能] 用来检测网络的连通情况和分析网络速度2、P ing命令详解参数意思和使用。
-t Ping指定的计算机直到中断。
-a 将地址解析为计算机名。
-n count 发送 count 指定的 ECHO 数据包数。
默认值为 4。
-l length 发送包含由 length 指定的数据量的 ECHO 数据包。
默认为 32 字节;最大值是65,527。
-f 在数据包中发送"不要分段"标志。
数据包就不会被路由上的网关分段。
-i ttl 将"生存时间"字段设置为 ttl 指定的值。
-v tos 将"服务类型"字段设置为 tos 指定的值。
-r count 在"记录路由"字段中记录传出和返回数据包的路由。
count 可以指定最少 1 台,最多 9 台计算机。
-s count 指定 count 指定的跃点数的时间戳。
-j computer-list 利用 computer-list 指定的计算机列表路由数据包。
连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。
-k computer-list 利用 computer-list 指定的计算机列表路由数据包。
连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w timeout 指定超时间隔,单位为毫秒。
destination-list 指定要 ping 的远程计算机Ctrl + c暂停TTL:(Time To Live ) 生存时间当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失,出现Request timed out(请求超时)的情况默认情况下,Linux 系统的TTL值为64或255,Windows NT/2000/XP 系统的默认TTL值为128,Win7 系统的TTL值是64,Windows 98 系统的TTL值为32,UNIX 主机的TTL值为2553、怎样使用Ping这命令来测试网络连通呢?连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。
计算机网络课程设计(ping)
![计算机网络课程设计(ping)](https://img.taocdn.com/s3/m/a9244547f7ec4afe04a1dfe9.png)
计算机网络课程设计Ping程序设计(后附源码)四川大学黄昊1143041195一.设计目标二.ICMP包结构三.校验和计算四.代码实现a)ICMP封包b)ICMP包转换成字节数组c)域名解析、选择IPv4地址d)原始套接口e)计算校验和五.运行结果六.总结一、设计目标本程序设计实现基本的ping程序功能,包括域名解析,ICMPv4回显包发送,统计丢失率等功能。
二、ICMP包结构ICMP包包含在IP包结构之内,是去除IP包头的部分,C#提供的Raw Socket功能可以实现包装ICMP结构,但自动包含IP包头等结构。
ICMP包由1Byte类型、1Byte SubCode、2字节校验和、2字节标示符、2字节序号,若干字节数据组成。
其结构图如下:4Byte类型号8 、子代码表示ICMP回显功能,默认标示符45、序号0、Data小节可填充数据,本程序填充了ASCII码‘a’十六进制61,填充24字节,所以整个包大小共32字节。
三、校验和计算对于ICMP包中的校验和,首先将校验和填0之后再整体计算。
计算时,按照2字节为一个单位累加,最后将所有溢出结果再次做加法,最后整体取反,返回一个2字节长的校验和。
具体计算方法伪代码如下:Int32 cksum = 0;for (int i = 0; i < 16; i++){cksum += ConvertToUInt16(packet, i * 2);}cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >> 16);return (ushort)(~cksum);四、代码实现a)实现难度1:封装ICMP包。
为了方便操作与计算,在C#中,创建了一个ICMP包的结构体。
为了使包的逻辑结构与实际发送的结构一样,借助了C#提供的一个机制,叫非托管内存布局,使用StructLayoutAttribute属性,其中参数LayoutKind.Sequential指定了整个结构体的数据堆放方式为顺序堆放,保证内存中数据的连续性。
ping命令详解图文
![ping命令详解图文](https://img.taocdn.com/s3/m/e4b03f68ee06eff9aef807d0.png)
p i n g命令详解图文集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]Ping1、P ing的基础知识Ping 是一个十分好用的TCP/IP工具。
[功能] 用来检测网络的连通情况和分析网络速度2、P ing命令详解参数意思和使用。
-t Ping指定的计算机直到中断。
-a 将地址解析为计算机名。
-n count 发送 count 指定的 ECHO 数据包数。
默认值为 4。
-l length 发送包含由 length 指定的数据量的 ECHO 数据包。
默认为 32 字节;最大值是65,527。
-f 在数据包中发送"不要分段"标志。
数据包就不会被路由上的网关分段。
-i ttl 将"生存时间"字段设置为 ttl 指定的值。
-v tos 将"服务类型"字段设置为 tos 指定的值。
-r count 在"记录路由"字段中记录传出和返回数据包的路由。
count 可以指定最少 1 台,最多 9 台计算机。
-s count 指定 count 指定的跃点数的时间戳。
-j computer-list 利用 computer-list 指定的计算机列表路由数据包。
连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。
-k computer-list 利用 computer-list 指定的计算机列表路由数据包。
连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w timeout 指定超时间隔,单位为毫秒。
destination-list 指定要 ping 的远程计算机Ctrl + c暂停TTL:(Time To Live ) 生存时间当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失,出现Request timed out(请求超时)的情况默认情况下,Linux 系统的TTL值为64或255,Windows NT/2000/XP 系统的默认TTL值为128,Win7 系统的TTL值是64,Windows 98 系统的TTL值为32,UNIX 主机的TTL值为2553、怎样使用Ping这命令来测试网络连通呢连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。
计算机网络的常用网络命令精品PPT课件
![计算机网络的常用网络命令精品PPT课件](https://img.taocdn.com/s3/m/c384cd5e998fcc22bdd10d5f.png)
1.Ping本机的IP地址
用ipconfig命令可查看本机的IP地址, Ping本机IP地址,要是能Ping通,则说明网络适 配器、网卡或MODEM工作正常。否则就不正常, 或者硬件问题,或者是驱动问题。
2.Ping 127.0.0.1
127.0.0.1就是本机的回送地址,用Ping 命令,如果Ping通说明TCP/IP协议工作正常,否 则TCP/IP就不正常。需要重新设置TCP/IP协议。
4.Ping网址
这样做的目的是要检测一下DNS,检测 一下一个带DNS服务的网络服务,在第3步Ping通 了同网段目标计算机的IP后,但仍无法连接到该 机,则可以Ping机的网络名,通常情况下会出现 该网址所指向的IP地址,这表明本机的DNS设置 正确而且DNS服务器工作正常,反之就可能是其 中之一出现了故障。
Ping使用方法
ping IP地址 或 域名 其他参数:
Ping –n 连续ping N个包 Ping –t 持续地Ping直到人为地中断,ctrl+breack暂时终止Ping命令
查看当前的统计结果,而ctrl+c则是中断命令的执行 Ping –l 指定每个ping 报文的所携带的数据部分字节数0-65500
Ping出错信息
unkonw host 主机名不可以解析为IP地址,故障原因可能是DNS server Network unreacheble 表示本地系统没有到达远程主机的路由。检查路由表的配置 netstat –r或是route print No answer 表示本地系统有到达远程主机的路由,但接受不到远程主机 返回报文 Request timed out 可能原因远程主机禁止了ICMP报文或是硬件连接问题
ipconfig 命令获得主机配置信息,包括 IP 地址、子网掩码和默认网关。
Ping命令和典型应用PPT教学课件
![Ping命令和典型应用PPT教学课件](https://img.taocdn.com/s3/m/491662576bec0975f565e212.png)
13
PPT精品课件
谢谢观看
Thank You For Watching
14
Ping命令和典型应用
2020/12/09
1
一 Ping的基础知识
PING(Packet Internet Groper ),因特网包 探索器,用于测试网络连接量的程序。
Ping发送一个ICMP(网间控制报文协议 ) 回声请求消息给目的地并报告是否收到所 希望的ICMP回声应答。
2020/12/09
2020/12/09
5
2020/12/09
6
4. Ping远程IP地址,这主要是检查本网或本机 与外部的连接是否正常。
2020/12/09
7
二 ping命令常用参数
2020/12/09
8
2020/12/09
9
2020/12/09
10
2020/12/09
11
2020/12/09
12
2020/12/09
2
二 如何用Ping命令来测试网络 的连通
1. Ping 127.0.0.1:127.0.0.1是本地循环地址 。
2020/12/09
3
2. Ping本机IP地址,这样是为了检查本机的IP地 址是否设置有误
2020/12/09
4
3. Ping本网网关或本网IP地址,这样是为 了检查硬件设备是否有问题,也可以检 查本机与本地网络连接是否正常;
网络常用命令ping的使用
![网络常用命令ping的使用](https://img.taocdn.com/s3/m/6b354e4c3b3567ec102d8a95.png)
-a——解析主机的NETBIOS主机名,如果你想知道你所ping的计算机 名则要加上这个参数了,一般是在运用ping命令后的第一行就显示出 来。
C:\WINDOWS>ping -a 192.168.1.100
Pinging 000 [192.168.1.100] with 32 bytes of data:
ping IP -t——连续对IP地址执行Ping命令,直到被用 户以Ctrl+C中断。
ping IP -l 2000——指定Ping命令中的数据长度为 2000字节,而不是缺省的32字节。
ping IP -n——执行特定次数的Ping命令。
-t参数 — 有这个参数时,当你ping一个主机时系统就不 停的运行ping这个命令,直到你按下Control-C。
C:\WINDOWS>ping 192.168.1.188 -t
Pinging 192.168.1.188 with 32 bytes of data:
Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64 Reply from 192.168.1.188: bytes=32 time<10ms TTL=64
补充知识:常用网络命令ppt课件
![补充知识:常用网络命令ppt课件](https://img.taocdn.com/s3/m/871ae0f10c22590102029d49.png)
1 ipconfig 图为运行ipconfig/all命令的结果窗口
1 ipconfig
常用选项2
ipconfig /release和ipconfig /renew 只能在向DHCP服务器租用其IP地址的计算机
上起作用 ipconfig/release 所有接口的租用IP地址便重新交付给DHCP服
这个命令同ping命令类似,但它所看到的 信息要比ping命令详细得多,它能反馈显 示送出的到某一站点的请求数据包所走的 全部路,以及通过该路由的IP地址,通过 该IP的时间是多少。
3 tracert
tracert命令还可以用来查看网络在连接站点时 经过的步骤或采取哪种路线,如果是网络出现故 障,就可以通过这条命令来查看是在哪儿出现问 题的。
2 ping
常见用法2
ping 局域网内其他IP 如果测试成功,表明本地网络中的网卡和载体
运行正确。但如果收到0个回送应答,那么表 示子网掩码不正确或网卡配置错误或电缆系统 有问题。 ping 网关IP 这个命令如果应答正确,表示局域网中的网关 路由器正在运行并能够做出应答。
2 ping
ping 计算机名 ping wangluo01 可以获得其IP地址 ping IP地址 ping 172.16.22.28 ping 域名 ping ping –t 172.16.22.122 不断的向目标主机发送
数据包,直到按下Ctrl+C才停止发送。
arp 显示Arp命令的所有参数 arp -a 显示本机Arp中的地址映射表 arp -s 在ARP缓存中添加一条记录 arp -a 172.16.22.28 获得目标主机的MAC地址
4 arp
ping与traceroute工作原理-ppt介绍(共7张)
![ping与traceroute工作原理-ppt介绍(共7张)](https://img.taocdn.com/s3/m/55d3380c591b6bd97f192279168884868762b86e.png)
第3页,共7页。
Trace route命令(mìng 的原理: lìng)
Trace Route测试通过IP TTL特性, 实现对源和目 标中的数据报传送中路径的探测,通过不同协议类 型的数据包在该过程中被路由器/目的主机不同的 处理结果,实现不同的协议测试,目前已知有ICMP 、UDP、TCP实现方式。
第7页,共7页。
Ping命令(mìng 的原理: lìng)
网络上的机器都有唯一确定的IP地址,我们给目标 IP地址发送一个数据包,对方就要返回一个同样 大小的数据包,根据返回的数据包我们可以确定 目标主机的存在,可以初步判断目标主机的操作 系统等。
第1页,共7页。
Ping命令(mìng 工作原 lìng) 理
系统上的客户程序和服务器程序通过交换HTTP消息 彼此交流。
HTTP定义Web客户(即浏览器)如何从web服务器请求 Web页面,以及服务器如何把Web页面传送给客户。
第6页,共7页。
HTTP工作(gōngzuò)流程
浏览器可以向web服务器发送请求并显示收到的网 页,当用户在浏览器地址栏中输入一个URL或点击 一个超连接时,浏览器就向服务器发出了HTTP请 求,该请求被送往由URL指定的WEB服务器,WEB服 务器接收到请求后,进行相关文档的检索并以 HTTP规定的格式送回所要求的文件或其他相关信 息,再由用户计算机上的浏览器负责解释和显示 。
第4页,共7页。
Trace route命令(mìng 的应用: lìng)
用于路由跟踪,判断从你的主机到目标主机经过 哪些路由器、跳计数、响应时间等等
可以推测出网络物理布局
网络PING命令合集56页PPT
![网络PING命令合集56页PPT](https://img.taocdn.com/s3/m/51ab70843b3567ec112d8abf.png)
谢谢!
36、自己的鞋子,自己知道紧在哪里。——西班牙
37、我们唯一不会改正的缺点是软弱。——拉罗什福科
xiexie! 38、我这个人走得很慢,但是我从不后退。——亚伯拉罕·林肯
39、勿问成功的秘诀为何,且尽全力做你应该做的事吧。——美华纳
40、学而不思则罔,思而不学则殆。——孔子
网络PING命令合集
1、合法而稳定的权力在使用得当时很 少遇到 抵抗。 ——塞 ·约翰 逊 2、权力会使人渐渐失去温厚善良的美 德。— —伯克
3、最大限度地行使权力总是令人反感 ;权力 不易确 定之处 始终存 在着危 险。— —塞·约翰逊 4、权力会奴化一切。——塔西佗
5、虽然权力是一头固执的熊,可是金 子可以 拉着它 的鼻子 走。— —莎士 比
PING命令的使用ppt
![PING命令的使用ppt](https://img.taocdn.com/s3/m/ad23745af5335a8102d2204d.png)
//-t: 连续对IP地址执行ping命令,直到被用户以 Ctrl+C中断
响应时间 明显变慢
-n count:发送count指定的Echo数据包数。
//在默认情况下,ping将发送四个数据包。
例如:ping -n 10 211.84.7.10
使用CTRL+C停 止
SUCCESS
THANK YOU
2020/1/3
-l size:发送size指定大小的到目标主机的数据包。
在默认的情况下Windows的ping发送的数据包 大小为32byt,最大能发送65500byt。当一次发送的 数据包大于或等于65500byt时,将可能导致接收方 计算机当机。这个参数配合其它参数以后危害非常强 大,比如攻击者可以结合-t参数实施DOS攻击。
-r count: 在“记录路由”字段中记录传出和返回数据包的
路由,探测经过的路由个数,但最多只能跟踪到9个 路由。
图3-4 参数-r的使用
SUCCESS
THANK YOU
0/1/3
天津青年职业学院 姚金玲
在网络中ping是一个十分强大的TCP/IP工具。它 的作用主要为:
1、用来检测网络的连通情况和分析网络速度
2、根据域名得到服务器IP
3、根据ping返回的TTL值来判断对方所使用的操 作系统及数据包经过的路由器数目。
1 、不带参数的ping 命令
Time To Live
因此一般TTL值:100~130ms之间, Windows系统 240~255ms之间, UNIX/Linux系统
2. Ping的参数介绍 如下图所示,从命令格式中可以看出它的复杂程序,
组网培训(ping命令)
![组网培训(ping命令)](https://img.taocdn.com/s3/m/ffe8e1ea998fcc22bcd10dcf.png)
组网培训一、网线的制作1、基本特性:橙、绿、棕、蓝1 输出数据(+)2 输出数据(-)3 输入数据(+)4 保留为电话使用5 保留为电话使用6 输入数据(-)7 保留为电话使用8 保留为电话使用2、直通(电脑与集线器)两端一样:白橙/橙/白绿/蓝/白蓝/绿/白棕/棕(TIA 568B标准)3、交叉(电脑与电脑)一端:白橙/橙/白绿/蓝/白蓝/绿/白棕/棕(568B标准)4、另一端:白绿/绿/白橙/蓝/白蓝/橙/白棕/棕(568A标准)5、制作过程PC-PC:反线PC-HUB:正线HUB-HUB普通口:反线HUB-HUB级连口-级连口:反线HUB-HUB普通口-级连口:正线HUB-SWITCH:反线HUB(级联口)-SWITCH:正线SWITCH-SWITCH:反线SWITCH-ROUTER:正线ROUTER-ROUTER:反线A) 不过也有人使用了跨接线时可以上网,而使用正确接线时也能进行HUB的级连。
这是因为他们使用的集线器是智能集线器。
这种设备可以自动将接线的绕对对调过来。
但这不代表这种压线的线序是正确的。
B) 真正的错误接法即串绕:即1、2为一对,3、4为一对,5、6为一对,7、8 为一对。
这一般是完全外行的人才会这样接,而网络进行通讯时实际使用1、2和3、6,而不是3、4。
这种错误的接线直接导致无法用眼睛或万用表来检查出来的,因为其端至端的连通性是正常的。
最终这种错误接线的最大危害是会产生很大的近端串扰。
它不会造成网络不通,而是使网络运行速度很慢,时通时断。
C) 假AMP线的鉴别:用火烤,真货的表皮是阻燃的,不会着火,只会慢慢变软,假的一烤就着,500多一箱肯定是假的D) 线速算法100/10 /8*70%二、网络调试命令1、测试网络通道(ping)如果看待ping 命令的结果测试实例:分段PING1、Ping 127.0.0.1:127.0.0.1是本地循环地址,如果本地址无法Ping通,则表明本地机TCP/IP 协议不能正常工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.创建套接字. 2. 建立SOCKADDR地址结构.(指定要连接到的服务器的IP地址和端口 号) 3. 用connect或WSAConnect初始化客户与服务器的连接. 其中.前两步和服务器端建立连接的一样. 第3步使用的函数如: int connect(SOCKET s, const struct sockaddr FAR* name, int namelen); 其中:s就是将要和服务器建立连接的套接字. name是服务器的地址结构 (SOCKADDR_IN). namelen是name的长度. 如果函数失败.一般返回的错误有:WSAECONNREFUSED 表示服务器 没有监听这个端口WSAETIMEDOUT 一般表示主机不可到达.
//当应用程序结束调用WSACleanup之后,设置Winsock通信代码 if (WSACleanup() == SOCKET ERROR){ printf("WSACleanup fa工led with error %d \n", WSAGetLastError()); }
协议寻址
应用程序通过SOCKADDR_IN结构来指定IP地址和服务器端口信息: struct sockaddr_in { short sin_family; //设置为AF_INET表示Winsock正使用IP地址族 u_short sin_port; //通信端口 struct in_addr sin_addr; //这个字段用sin_addr(4字节) 保存IP地址 char sin_zero[8]; //这个字段是填充项.使这个结构体大小和
winsock编程技术 简介
Wink是一种标准API. 主要用于网络通信.这些API函数有Winsock1 Winsock2版本. 通过前缀WSA区分. 1.1 Winsock头文件及库文件 使用Winsock2规范时 应包含winsock2.h 连接的库为 WS2_32.LIB使用 Winsock1规范时. 应包含winsock.h 连接的库为 WSOCK32.LIB另外 mswsock.h用于微软专用编程扩展. 连接的库为 MSWSOCK.DLL 1.2 Winsock的初始化 每个Winsock应用程序都必须加载合适的Winsock DLL版本. 函数如下 int WSAStartup { WORD wVersionRequested,LPWSADATA 1pWSAData, //指向WSAData结构(见下边)的指针. 本函数将填充这个结构 体. WORD wVersionRequested, LPWSADATA 1pWSAData );
关闭套接字
int closesocket(SOCKET s);函数执行后.会释放套接字描述符.所以之 后对s的调用会失败(产生WSAENOTSOCK)错误.如果没有对s的其他 引用.那所有与s关联的资源都会被释放.包括丢弃所有队列中的数据.
ping程序原理
它主要的功能是用来检测网络的连通情况和分析网络速度。 Ping程序的实现方法是:主机向远程计算机发出ICMP回应 请求以后,远程计算机会处理这个请求,然后生成一条回应 应答消息,再通过网络传回给发送主机;假如由于某些原因 不能抵达目标主机,就会生成对应的ICMP错误消息由那个 路径上某处的一个路由器返回.如果是与远程主机的连接没 问题,只是远程主机已经关机,便需要由自己的程序来执行 超时检查.
其中WSAData结构如下: typedef struct WSAData { WORD wVersion; //WSAAtartup函数会将这个字段设置为将要使 用 的Winsock版本. WORD wHighVersion; //现有Winsock库的最高版本. char szDescription[WSADESCRTIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets;//客同时打开的最大套接字数.取决与可用的 物理资源. unsigned short iMaxUdpDg; //数据报最大长度 char FAR* 1pVendorInfo; //保留字段 }WSADATA,*LPWSADATA ; 从windows98向后的平台都支持Winsock2.2版本. 但Windows CE支持的是 Winsock 1.1版本.如果WSAStartup()的第一个参数wVersionRequested 指定 的版本比当前平台上的最新版本还新.则函数就会失败. 在使用Winsock接口编程完成后.要int WSACleanup(void);来释放所有由 Winsock分配的资源.
现在可以让服务器接受连接.使用函数accept,: SOCKETaccept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen); 其中 s是处于监听模式的套接字. addr是SOCKADDR_IN对象的地址. addrlen是第2个参数的长度.这个函数取出被搁置的连接队列中的第一 个连接请求.对它服务.函数执行后第2个参数和第3个参数指向的变量 会被函数设置为客户IPv4地址信息和该信息的长度. 并且.accept函数 返回一个新的套接字.对该客户的所有后续操作(如数据收发等)都用这 个新套接字来完成. 而原来的套接字s则继续处于监听模式.如果这个函 数出错.会返回 INVALID_SOCKET .
struct icmp { unsigned char icmp_type; // 消息类型 unsigned char icmp_code; // 代码 unsigned short icmp_cksum; // 校验和 unsigned short icmp_id; // 用来惟一标识此请求的ID号,通常设置为进程ID unsigned short icmp_seq; // 序列号 unsigned long icmp_data; // 时间戳 };
//首部长度 //ip版本号 //服务类型 // 总长度 //标识 //标志位 //生存时间 //协议(TCP或其他) //ip首部校验和 //源ip地址 //目的ip地址
unsigned char sendpacket[PACKET_SIZE]; unsigned char recvpacket[PACKET_SIZE]; struct sockaddr_in dest_addr; struct sockaddr_in from_addr; int sockfd; int pid; //函数声明 函数声明 unsigned short cal_chksum(unsigned short *addr,int len); int pack(int pack_no); int unpack(unsigned char *buf,int len); void send_packet(void); void recv_packet(void); //指明目的主机信息 //指明源主机信息
错误检查和处理
对Winsock函数来说返回错误是很常见的. 失败时最常见的返回值是 SOCKET_ERROR(值为-1).检查到错误后. 可以用 int WSAGetLastError(void);函数返回int. 这是在WINSOCK1.h或Winsock2.h中 定义的常量值.来获得一段代码专门说明错误. 与WSAGetLastError函数对应的有个WSASetLastError().它可以手动设置一个 错误代码让WSAGetLastError去获取. 例如以下的函数: //初始化winsock if(WSAStartup(0x1010,&wsaData)!=0) { printf("wsastartup error\n"); exit(1); } // 因为这个函数调用时Winsock还没有加载. 所以不能用WSAGetLastError()来 确定错误.
SOCKADDR结构的一样. };
在unsigned long 和点分十进制字符串之间转换IP地址的表示可以用下 边的函数: unsigned long inet_addr( const char FAR* cp); //cp为点分十进制字 符串
创建套接字
套接字是SOCKET类型. 创建套接字的函数是socket 和 WSASocket.
#include<stdio.h> #include<stdlib.h> #include<windows.h> #include<process.h> #include "winsock.h" #pragma comment(lib,"Ws2_32.lib");
#define SEND_SIZE 32 #define PACKET_SIZE 4096 #define ICMP_ECHO 8 #define ICMP_ECHOREPLY 0
SOCKET PASCAL FAR socket( int af, int type, int protocol); af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPAInternet地址 格式。 type:新套接口的类型描述。 protocol:套接口所用的协议。如调用者不想指定,可用0。
将套接字和地址结构绑定 bind(s, (SOCKADDR*)&tcpaddr, sizeof(tcpaddr)); 注意第2个参数的类型有转换.这个函数如果出错会返回SOCKET_ERROR . 常见的错误是: WSAEADDRINUSE(表示本地这个端口和IP已被另一个进程 绑定). WSAEFAULT (表示该套接字s已被绑定过了)。 现在套接字已被绑定到本地一个端口上了. 接着要让他进入监听模式.使用函 数 listen:int listen(SOCKET s, int backlog); 其中: s是已被bind过的套接字. backlog则是指定被搁置的连接队列的最大长 度.当连接的客户数大于这里的最大长长度并且并且服务进程没有来得及处理. 则多出的连接请求会失败.这个函数相关的错误.常见的有 WSAEINVAL(套接 字在listen之前没有bind).