標籤:go語言 golang 網路 go 廣播
網路資料包的發送分為三種方式,分別是單播、組播、廣播。
廣播通俗地講,就是讓你的機器發送的資料包可以被同一個網路內的所有主機都接收到。
在講解如何發送廣播包之前,先來看看跟廣播有關的知識:
我們都知道IP地址的作用是用來在網路中定位某個網路介面的(沒錯,準確的講,IP並不是定位某一台主機)。我們通常見到的IP地址的形式都是如下這樣子的:
XXX.XXX.XXX.XXX
這種IP地址的形式叫做點分十進位標記法,其實IP是一個32位長的位元,以每8位為單位,共分成4個部分,也就是分成了4個位元組。
IP地址的組成方式是: [網路號]+[主機號]
網路號是用來標識某個網路的,而主機號是用來標識網路中的某一台主機的(其實是主機上的某個介面)。
通常電腦發送一個資料包時會在資料包的頭部加上寄件者的IP地址,和接收者的IP地址。但是一般電腦發送資料包的時候,同一個網路內的所有主機都會收到這個資料包,但是只有那個自己的IP地址和資料包中的接收者的IP地址相同的那個電腦才會真正接收這個資料包。
如果要讓網路(同一網路)中的所有電腦都能收到這個資料包,就應該將這個資料包的接收者地址設定為這個網路中的最高的主機號。通常255.255.255.255就可以達到這個要求。所以我們如果要發送一次UDP廣播報文,就可以試試如下執行個體代碼:
package mainimport "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