GO语言练习:网络编程 ICMP 示例

简介:

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
复制代码

 


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


相关文章
|
8月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
178 1
|
4月前
|
监控 安全 Go
使用Go语言构建网络IP层安全防护
在Go语言中构建网络IP层安全防护是一项需求明确的任务,考虑到高性能、并发和跨平台的优势,Go是构建此类安全系统的合适选择。通过紧密遵循上述步骤并结合最佳实践,可以构建一个强大的网络防护系统,以保障数字环境的安全完整。
132 12
|
5月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
6月前
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
454 12
|
9月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
319 20
|
9月前
|
网络协议 算法 安全
Go语言的网络编程与TCP_UDP
Go语言由Google开发,旨在简单、高效和可扩展。本文深入探讨Go语言的网络编程,涵盖TCP/UDP的基本概念、核心算法(如滑动窗口、流量控制等)、最佳实践及应用场景。通过代码示例展示了TCP和UDP的实现,并讨论了其在HTTP、DNS等协议中的应用。最后,总结了Go语言网络编程的未来发展趋势与挑战,推荐了相关工具和资源。
299 5
|
9月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
286 0
|
11月前
|
数据采集 监控 安全
公司网络监控软件:Zig 语言底层优化保障系统高性能运行
在数字化时代,Zig 语言凭借出色的底层控制能力和高性能特性,为公司网络监控软件的优化提供了有力支持。从数据采集、连接管理到数据分析,Zig 语言确保系统高效稳定运行,精准处理海量网络数据,保障企业信息安全与业务连续性。
210 4
|
12月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
438 6
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
194 1