Go如何发送广播包

u011774512 · · 10228 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

网络数据包的发送分为三种方式,分别是单播、组播、广播


广播通俗地讲,就是让你的机器发送的数据包可以被同一个网络内的所有主机都接收到。


在讲解如何发送广播包之前,先来看看跟广播有关的知识:

我们都知道IP地址的作用是用来在网络中定位某个网络接口的(没错,准确的讲,IP并不是定位某一台主机)。我们通常见到的IP地址的形式都是如下这样子的:

                    XXX.XXX.XXX.XXX

这种IP地址的形式叫做点分十进制表示法,其实IP是一个32位长的二进制数,以每8位为单位,共分成4个部分,也就是分成了4个字节。


IP地址的组成方式是:  [网络号]+[主机号]

网络号是用来标识某个网络的,而主机号是用来标识网络中的某一台主机的(其实是主机上的某个接口)。


通常计算机发送一个数据包时会在数据包的头部加上发送者的IP地址,和接收者的IP地址。但是一般计算机发送数据包的时候,同一个网络内的所有主机都会收到这个数据包,但是只有那个自己的IP地址和数据包中的接收者的IP地址相同的那个计算机才会真正接收这个数据包。

如果要让网络(同一网络)中的所有计算机都能收到这个数据包,就应该将这个数据包的接收者地址设置为这个网络中的最高的主机号。通常255.255.255.255就可以达到这个要求。所以我们如果要发送一次UDP广播报文,就可以试试如下实例代码:

package main

import "net"

func main() {
	// 这里设置发送者的IP地址,自己查看一下自己的IP自行设定
	laddr := net.UDPAddr{
		IP:   net.IPv4(192, 168, 137, 224),
		Port: 3000,
	}
	// 这里设置接收者的IP地址为广播地址
	raddr := net.UDPAddr{
		IP:   net.IPv4(255, 255, 255, 255),
		Port: 3000,
	}
	conn, err := net.DialUDP("udp", &laddr, &raddr)
	if err != nil {
		println(err.Error())
		return
	}
	conn.Write([]byte(`hello peers`))
	conn.Close()
}


打开WireShark,设定过滤规则为udp.port == 3000, 然后执行一下程序,就可以抓到我们发送的广播包了:




如果转载请注明出处:http://blog.csdn.net/gophers




版权声明:本文为博主原创文章,未经博主允许不得转载。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u011774512

查看原文:Go如何发送广播包

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

10228 次点击  
加入收藏 微博
下一篇:go test
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传