博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO语言练习:网络编程 ICMP 示例
阅读量:6894 次
发布时间:2019-06-27

本文共 1986 字,大约阅读时间需要 6 分钟。

1、Go语言网络编程:ICMP示例代码 icmptest.go

1 package main 2  3 import ( 4     "fmt" 5     "net" 6     "os" 7     "io" 8     "bytes" 9 )10 11 func main() {12     if len(os.Args) != 2 {13         fmt.Println("Usage : ", os.Args[0], "host")14         os.Exit(0)15     }16     service := os.Args[1]17 18     conn, err := net.Dial("ip4:icmp", service)19     checkError(err)20 21     var msg [512]byte22     msg[0] = 823     msg[1] = 024     msg[2] = 025     msg[3] = 026     msg[4] = 027     msg[5] = 1328     msg[6] = 029     msg[7] = 3730     len := 831     check := checkSum(msg[0:len])32     msg[2] = byte(check >> 8)33     msg[3] = byte(check & 255)34 35     _, err = conn.Write(msg[0:len])36     checkError(err)37 38     fmt.Println("Got response")39     if msg[5] == 13 {40         fmt.Println("Identifier matches")41     }42     if msg[7] == 37 {43         fmt.Println("Sequence matches")44     }45 46     os.Exit(0)47 }48 49 func checkSum(msg []byte) uint16 {50     sum := 051 52     for n := 1; n < len(msg) - 1; n += 2 {53         sum += int(msg[n]) * 256 + int(msg[n+1])54     }55     sum = (sum >> 16 ) + (sum & 0xffff)56     sum += (sum >> 16)57     var answer uint16 = uint16(^sum)58     return answer59 }60 61 func checkError(err error) {62     if err != nil {63         fmt.Fprintf(os.Stderr, "Fatal error : %s\n", err.Error())64         os.Exit(1)65     }66 }67 68 func readFully(conn net.Conn) ([]byte, error) {69     defer conn.Close()70 71     result := bytes.NewBuffer(nil)72     var buf [512]byte73     for {74         n, err := conn.Read(buf[0:])75         result.Write(buf[0:n])76         if err != nil {77             if err == io.EOF {78                 break79             }80             return nil, err81         }82     }83 84     return result.Bytes(), nil85 }

2、编译及运行

$ go build icmptest.go $ lsicmptest  icmptest.go$ ./icmptest www.baidu.comGot responseIdentifier matchesSequence matches

 

本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4663059.html,如需转载请自行联系原作者

你可能感兴趣的文章
Oracle内核技术揭密
查看>>
《软件工程(第4版?修订版)》—第1章1.3节什么是好的软件
查看>>
《PHP、MySQL和Apache入门经典(第5版)》一一2.7 基本安全规则
查看>>
《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——2.5 3GPP2...
查看>>
《深入理解JavaScript》——2.6 JavaScript是广泛使用的吗
查看>>
Velocity官方指南-应用程序的属性
查看>>
《流量的秘密: Google Analytics网站分析与优化技巧(第3版)》一1.7 网站分析在企业中的位置...
查看>>
Xmemcached 1.2.2发布——支持遍历所有key
查看>>
API网关,让Serverless服务开放更加迅速
查看>>
如何使用OSS事件通知功能?
查看>>
Linux Shell十一 脚本安装Discuz
查看>>
贝叶斯算法
查看>>
Spark Streaming 1.6 流式状态管理分析
查看>>
ANTLR快餐教程(2) - ANTLR其实很简单
查看>>
Windows 7 中放大镜的使用方法和快捷键
查看>>
Git基础01
查看>>
dhtmlxCombo ztree
查看>>
C# WCF DataContractSerializer 类
查看>>
数据库数据迁移失败,如何进行修复操作
查看>>
二叉树递归分形,牛顿分形图案
查看>>