IP校验和

  1 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <linux/if_ether.h>
  4 #include <linux/ip.h>
  5 #include <linux/udp.h>
  6 #include <linux/types.h>
  7
  8 unsigned short check_sum(unsigned char *data, int len);
  9
 10 int main()
 11 {
 12         unsigned char data[1024] = {
 13         0x45, 0x00,
 14         0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11,
 15         0x00, 0x00, 0xc0, 0xa8, 0x1f, 0x72, 0xc0, 0xa8,
 16         0x1f, 0x7a
 17         };
 18
 19         unsigned short ret = 0;
 20         ret = check_sum(data, 20);
 21         printf("check sum is %x\n", htons(ret));
 22 }
 23
 24 unsigned short check_sum(unsigned char *data, int len)
 25 {
 26         unsigned short ret = 0;
 27         int i = 0;
 28         int sum = 0;
 29         unsigned short *p = (short *)data;
 30         for(i=0; i<len/2; i++)
 31                 sum = sum + ntohs(p[i]);
 32         if(sum > 0xffff){
 33                 sum = (sum & 0x0ffff) + ((sum & 0xf0000) >> 16);
 34         }
 35
 36         ret = (short)sum;
 37         return ~ret;
 38 }
  1. 0x00 0x00
  2. 按两字节相加完回滚(如果结果是2856D,则2要按0002 继续加 856D)
  3. htons()
时间: 2024-10-26 07:12:53

IP校验和的相关文章

IP校验和原理

对于一个学习网络协议的新手来说,碰到校验和这个词的时候可能会存在疑惑,看书本上讲的左想右想不知道再讲什么:只要你弄明白IP校验和的原理,I C M P.I G M P.U D P和T C P的校验和也就很好理解了. 上图是一般IP数据报的格式,若仅仅去理解校验和就不必去看这些字段的细节.如果没有在'选项'里面添加内容,那么前面20字节为IP数据包的首部,IP校验和就是对这10个字(也就是20个字节)求的校验和,校验和说白了就是各个二进制数按位取反再求和(或者求和再按位取反),要注意的是这里的数没

IP校验和计算

今天上课提到IP头部校验和怎么算的,还真不是很清楚,于是去网上查了些资料,整理记录一下.IP首部校验和的计算主要是两步:按位异或和取反,具体来说1. IP头部以16位为一个单位,逐个模2加(相当于异或):2. 得到的结果取反,作为校验和放入校验和字段:3. 初始计算校验和字段时该字段全部用0填充:     以上是对于发送者来说如何计算校验和的,而对于接收者来说,验证也很简单:1. 对于接收的IP报文头部以16位为单位逐个求和:2. 若结果为1,则校验正确,否则出错丢弃:     原理很简单,接收

使用Python计算IP、TCP、UDP校验和

1.1 ip校验和的计算 Ip校验是针对ip头部的,即仅校验ip头部,而对于ip数据部分的校验,则交由相应的四次协议来保证, ip 头部中校验和字段为16bit. 计算原理如下: 1.把校验和字段设置为0 2.计算ip头部中所有16bit的字之和 3.将2中得到的和按位取反,得到校验和. 1.2 tcp校验和的计算原理 对于ip层协议来说,其校验和只要计算ip头即可,那相对的,对于四层协议来说,其校验和则需要计算四层头部与四层数据. tcp校验需要将ip伪首部.tcp报头.tcp数据分为16位的

TCP校验和的原理和实现

http://blog.csdn.net/zhangskd/article/details/11770647 分类: Linux TCP/IP Linux Kernel 2013-09-24 18:29 7853人阅读 评论(0) 收藏 举报 目录(?)[+] 概述 TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证.其目的是为了发现TCP首部和数据在发送端到 接收端之间发生的任何改动.如果接收方检测到校验和有差错,则TCP段会被直接丢弃. TCP校验和覆盖TCP首部和TCP数据,

TCP/IP学习笔记(三)——IP,ARP,RARP

参考文献: * <TCP/IP详解 卷一:协议>: 1. IP网际协议 1.1 特点: 不可靠:不能保证IP数据报能成功到达目的地: 无连接:不维护任何关于后续数据报状态信息,即没有握手的环节,比如UDP也是无连接的: 1.2 IP首部 普通IPv4首部长度20字节(除非含有选项字段): 网络字节序:Big-endian: 服务类性(TOS):共8位,实际有效位4bit,最小时延,最大吞吐量,最高可靠性,最小费用: 不同的协议有不同的要求:Telnet和Rlogin用于少量交互数据要求最小传输

Kali Linux 渗透测试之拒绝服务攻击及防御

作为渗透测试人员,有时候需要对客户的系统进行DDOS攻击测试,那么这个时候就需要我们有一款合格的测试工具.而在Kali Linux上就集成了一些DDOS测试工具供测试者使用,下面就简单介绍一些测试工具. kali下的拒绝服务攻击: D(D)OS........................................1 yersinia......................................2 hping3................................

性能测试培训:帮你定位 Linux 性能问题的 18 个命令以及工具

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner的培训中,为了提高学员性能优化的经验,加入了很多服务器方面的优化知识,为性能调优的能力打下基础.今天学习下linux性能分析的命令和工具性能优化的方法.(大家对课程感兴趣,请加qq:564202718) 1.Top Top命令是一个性能监控程序,它按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果.这条命令显示了C

显示器 Linux 性能 18 (一个命令行工具传递)

对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因.我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每一个Linux/Unix 系统管理员的工作.这些命令行工具能够在各种Linux系统下使用.能够用于监控和查找产生性能问题的解决办法.这个命令行工具列表提供了足够的工具.您能够挑选适用于您的监控场景的工具. 1.Top-Linux进程监控

监控 Linux 性能的 18 个命令行工具

对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每个Linux/Unix 系统管理员的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的工具,您可以挑选适用于您的监控场景的工具. LitStone翻译于 2个月前 3人顶