GO语言练习:网络编程 ICMP 示例
2015-07-20 23:14
666 查看
1、代码
2、编译及运行
1、Go语言网络编程:ICMP示例代码 icmptest.go
2、编译及运行
2、编译及运行
1、Go语言网络编程:ICMP示例代码 icmptest.go
package main import ( "fmt" "net" "os" "io" "bytes" ) func main() { if len(os.Args) != 2 { fmt.Println("Usage : ", os.Args[0], "host") os.Exit(0) } service := os.Args[1] conn, err := net.Dial("ip4:icmp", service) checkError(err) var msg [512]byte msg[0] = 8 msg[1] = 0 msg[2] = 0 msg[3] = 0 msg[4] = 0 msg[5] = 13 msg[6] = 0 msg[7] = 37 len := 8 check := checkSum(msg[0:len]) msg[2] = byte(check >> 8) msg[3] = byte(check & 255) _, err = conn.Write(msg[0:len]) checkError(err) fmt.Println("Got response") if msg[5] == 13 { fmt.Println("Identifier matches") } if msg[7] == 37 { fmt.Println("Sequence matches") } os.Exit(0) } func checkSum(msg []byte) uint16 { sum := 0 for n := 1; n < len(msg) - 1; n += 2 { sum += int(msg ) * 256 + int(msg[n+1]) } sum = (sum >> 16 ) + (sum & 0xffff) sum += (sum >> 16) var answer uint16 = uint16(^sum) return answer } func checkError(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error : %s\n", err.Error()) os.Exit(1) } } func readFully(conn net.Conn) ([]byte, error) { defer conn.Close() result := bytes.NewBuffer(nil) var buf [512]byte for { n, err := conn.Read(buf[0:]) result.Write(buf[0:n]) if err != nil { if err == io.EOF { break } return nil, err } } return result.Bytes(), nil }
2、编译及运行
$ go build icmptest.go $ ls icmptest icmptest.go $ ./icmptest www.baidu.com Got response Identifier matches Sequence matches
相关文章推荐
- [BZOJ1491][NOI2007]社交网络
- [MFC]TCP通信的简单实现
- httpd-2.4.1 安装笔记
- SOLARIS 10/11的网络配置
- AsyncHttpClient介绍
- Apache Web Server -> httpd 的文档根目录 及 访问控制
- 网络流+二分图总结
- 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
- OSI七层网络参考模型
- 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
- HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)
- 理解HTTP幂等性(转)
- qt程序运行时的错误?undefined reference to `_imp___ZN10QTcpSocketD1Ev'
- (网络视频监控)面试题12
- Java网络编程之TCP通信
- http://www.zhihuishi.com/source/1.html
- 云计算和大数据时代网络技术揭秘(十一)数据中心互联
- yuv测试序列视频下载网址 http://media.xiph.org/video/derf/
- http:get&post方法
- 卷积神经网络误差分析