用tcl实现ip头部校验和

上一篇 / 下一篇  2009-05-11 17:57:14

最近测试经常需要组建ip报文,我习惯于使用tcl,但是老愁不知道怎么计算校验和,今天琢磨了半天写出了ip头校验和的tcl实现,供需要的人分享。

//这是需要计算校验和的ip头的16进制表示形式
set Data "45000034921e400080060000c0a80141c0a80140"

proc checksum {Data} {  //用要计算校验和的数据的16进制表示形式作为参数,返回校验和
 set DataLen [string length $Data]
 set sum 0
 for {set i 0} {$i < [expr $DataLen - 3] } { incr i 4 } {
  set next "0x"
  append next [string range $Data $i [expr $i + 3] ]
  set sum [expr $sum + $next]
 }
 
 if { $i != $DataLen } {
  set next "0x"
  append next [string range $Data $i end ]
  append next [string repeat "0"  [expr 4-($DataLen - $i)]]
  puts "$next"
  set sum [expr $sum + $next]
 }
  
 while { [expr $sum >> 16] > 0 } {
  set sum [expr ($sum & 0xffff) + ($sum >> 16)]
 }

 return [expr (~$sum)& 0xffff]
}

puts [checksum $Data]


TAG: IP Tcl TCP Tk UDP tcl tk ip checksum udp tcp

引用 删除 hnwyysun   /   2009-11-11 08:10:20
有没有TCP校验和计算的???有的话给我发一个,邮箱hnwyysun@163.com.非常感谢。
 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 836
  • 日志数: 1
  • 建立时间: 2009-05-11
  • 更新时间: 2009-05-11

RSS订阅

Open Toolbar