GO语言练习:网络编程 ICMP 示例
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 示例相关推荐
- MFC socket网络编程(流程示例)
MFC socket网络编程(流程示例) 1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK! 服务器端程序: 1.加 ...
- x的平方加y平加xy的java语言_JAVA语言及网络编程-中国大学mooc-题库零氪
第1章 认识Java语言 单元测验1 1.使用计算机处理数据,输入原始数据必须放在下列哪个步骤之后? A.申请内存空间 B.数据处理 C.输出处理结果 D.未包含在选项中 2.如果程序中出现单词&qu ...
- Go语言TCP网络编程(详细)
一.序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分.在日常应用中,我们也可以看到Go中的net以及其subdirectori ...
- 基于C语言的网络编程笔记分享
网络编程 OSI模型与TCP/IP协议体系结构 OSI模型 七层 理想化模型(并不是真正使用的模型,有参考价值) 应用层 数据处理 表示层 数据的加密解密ASCII -> 电信号 -> A ...
- 5.3linux下C语言socket网络编程简例
原创文章,转载请注明转载字样和出处,谢谢! 这里给出在Linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后 ...
- C语言之网络编程(一)域名解析
在网络编程时,知道域名是不能直接访问一个主机的,需要转换成相应的IP地址.有时在程序中需要将一个IP地址转换成一个域名.本节将讲解C程序中的IP地址与域名的转换问题. 提示:在TCP/IP网络中,通信 ...
- linux下C语言socket网络编程简例
转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...
- Java语言的网络编程
网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.迅雷等软件. B/S结构 :全称为Browser/Server结构,是指浏览器 ...
- C语言之网络编程(必背知识点)
一.认识网络 1.网络发展史 网络的来历_百度知道 ARPnetA--Internet--移动互联网--物联网 2.局域网和广域网 局域网(LAN) 局域网的缩写是LAN,local area ne ...
最新文章
- python ffmpeg模块,python执行ffmpeg
- 英特尔是 Chrome OS 代码的第二大贡献者
- InnoDB 存储引擎体系架构
- 在JSP页面中使用Ajax主题时的引入
- Docker-compose 常用命令
- 为吸引三星建170亿美元芯片厂,德克萨斯州将提供大额财产税减免
- IntelliJ IDEA 2017 MySQL5 绿色版 Spring 4 Mybatis 3 配置步骤详解(二)
- Julia :PyPlot的plot_date
- 罗盘时钟python代码_HTML 罗盘式时钟
- pytorch dataloader参数解析
- 车辆、行人跟踪一网打尽,超轻量、多类别、小目标跟踪系统开源了!
- Golang底层原理剖析之panic与recover
- 星号下三角形python答案_Python练习题:星号三角形
- 最高20天年假,入职即带股票!2021微软校园招聘 | 空中宣讲会倒计时!
- 添加额外jars包到Hive
- 基于 Android 的合肥市旅游攻略 App的设计与实现
- MsysGIT -- Windows下GIT提供众多的Linux命令
- 【NVMe2.0b 16-1】Get Log Page
- Maven 的 Lifecycle 和 plugins
- 前端:给中国奥运金牌数做可视化
热门文章
- centos8 Failed to download metadata for repo ‘base‘: Cannot download repomd.xml
- idea git和svn间切换
- oracle mos账号金额,mos账号注正册步骤+证书查询+注意事项.pptx
- Kindle一些使用
- 【NOIP2000】【vijos1347】乘积最大
- 【NOIP2010】【codevs1069】关押罪犯(并查集补集,拆点)
- Python入门--特殊属性
- docker登录密码错误_Docker安装运行Mysql 5.7.31容器并修改数据库密码
- 操作系统—多生产者多消费者问题
- 并查集路径压缩和按rank合并代码实现