Go如何发送广播包

Go如何发送广播包

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

发送网络数据包成三种方式,每间单播、组播、广播


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


在解说怎样发送广播包之前。先来看看跟广播有关的知识:

我们都知道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, 然后运行一下程序。就能够抓到我们发送的广播包了:

Go如何发送广播包


假设转载请注明出处:http://blog.csdn.net/gophers


版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117378.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号