1、代码

2、编译及运行


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]byte
22     msg[0] = 8
23     msg[1] = 0
24     msg[2] = 0
25     msg[3] = 0
26     msg[4] = 0
27     msg[5] = 13
28     msg[6] = 0
29     msg[7] = 37
30     len := 8
31     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 := 0
51
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 answer
59 }
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]byte
73     for {
74         n, err := conn.Read(buf[0:])
75         result.Write(buf[0:n])
76         if err != nil {
77             if err == io.EOF {
78                 break
79             }
80             return nil, err
81         }
82     }
83
84     return result.Bytes(), nil
85 }

2、编译及运行

$ go build icmptest.go
$ ls
icmptest  icmptest.go
$ ./icmptest www.baidu.com
Got response
Identifier matches
Sequence matches

转载于:https://www.cnblogs.com/fengbohello/p/4663059.html

GO语言练习:网络编程 ICMP 示例相关推荐

  1. MFC socket网络编程(流程示例)

    MFC socket网络编程(流程示例) 1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK! 服务器端程序: 1.加 ...

  2. x的平方加y平加xy的java语言_JAVA语言及网络编程-中国大学mooc-题库零氪

    第1章 认识Java语言 单元测验1 1.使用计算机处理数据,输入原始数据必须放在下列哪个步骤之后? A.申请内存空间 B.数据处理 C.输出处理结果 D.未包含在选项中 2.如果程序中出现单词&qu ...

  3. Go语言TCP网络编程(详细)

    一.序言  Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectori ...

  4. 基于C语言的网络编程笔记分享

    网络编程 OSI模型与TCP/IP协议体系结构 OSI模型 七层 理想化模型(并不是真正使用的模型,有参考价值) 应用层 数据处理 表示层 数据的加密解密ASCII -> 电信号 -> A ...

  5. 5.3linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...

  6. C语言之网络编程(一)域名解析

    在网络编程时,知道域名是不能直接访问一个主机的,需要转换成相应的IP地址.有时在程序中需要将一个IP地址转换成一个域名.本节将讲解C程序中的IP地址与域名的转换问题. 提示:在TCP/IP网络中,通信 ...

  7. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

  8. Java语言的网络编程

    网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.迅雷等软件. B/S结构 :全称为Browser/Server结构,是指浏览器 ...

  9. C语言之网络编程(必背知识点)

     一.认识网络 1.网络发展史 网络的来历_百度知道 ARPnetA--Internet--移动互联网--物联网 2.局域网和广域网 局域网(LAN) 局域网的缩写是LAN,local area ne ...

最新文章

  1. python ffmpeg模块,python执行ffmpeg
  2. 英特尔是 Chrome OS 代码的第二大贡献者
  3. InnoDB 存储引擎体系架构
  4. 在JSP页面中使用Ajax主题时的引入
  5. Docker-compose 常用命令
  6. 为吸引三星建170亿美元芯片厂,德克萨斯州将提供大额财产税减免
  7. IntelliJ IDEA 2017 MySQL5 绿色版 Spring 4 Mybatis 3 配置步骤详解(二)
  8. Julia :PyPlot的plot_date
  9. 罗盘时钟python代码_HTML 罗盘式时钟
  10. pytorch dataloader参数解析
  11. 车辆、行人跟踪一网打尽,超轻量、多类别、小目标跟踪系统开源了!
  12. Golang底层原理剖析之panic与recover
  13. 星号下三角形python答案_Python练习题:星号三角形
  14. 最高20天年假,入职即带股票!2021微软校园招聘 | 空中宣讲会倒计时!
  15. 添加额外jars包到Hive
  16. 基于 Android 的合肥市旅游攻略 App的设计与实现
  17. MsysGIT -- Windows下GIT提供众多的Linux命令
  18. 【NVMe2.0b 16-1】Get Log Page
  19. Maven 的 Lifecycle 和 plugins
  20. 前端:给中国奥运金牌数做可视化

热门文章

  1. centos8 Failed to download metadata for repo ‘base‘: Cannot download repomd.xml
  2. idea git和svn间切换
  3. oracle mos账号金额,mos账号注正册步骤+证书查询+注意事项.pptx
  4. Kindle一些使用
  5. 【NOIP2000】【vijos1347】乘积最大
  6. 【NOIP2010】【codevs1069】关押罪犯(并查集补集,拆点)
  7. Python入门--特殊属性
  8. docker登录密码错误_Docker安装运行Mysql 5.7.31容器并修改数据库密码
  9. 操作系统—多生产者多消费者问题
  10. 并查集路径压缩和按rank合并代码实现