Golang : syscall.Socket example
Just a comparison on how Golang code that utilize net
package looks like if implemented with syscall.Socket
example :
package main
import (
"fmt"
"net"
"os"
)
func main() {
service := "127.0.0.1"
protocol := "icmp"
IPAddr, err := net.ResolveIPAddr("ip4", service)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
IPconn, err := net.ListenIP("ip4:"+protocol, IPAddr)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
buffer := make([]byte, 1024)
for { // display the bytes read from IP connection
num, clientAddr, _ := IPconn.ReadFrom(buffer)
fmt.Println("Reading from : ", clientAddr)
fmt.Printf("% X\n", buffer[:num])
}
}
to
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_ICMP)
if err != nil {
fmt.Println(err)
}
file := os.NewFile(uintptr(fd), "")
for {
buffer := make([]byte, 1024)
num, _ := file.Read(buffer)
fmt.Printf("% X\n", buffer[:num])
}
}
References :
http://www.darkcoding.net/software/raw-sockets-in-go-link-layer/
https://www.socketloop.com/references/golang-net-fileconn-function-example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+4.7k Python : Convert(cast) bytes to string example
+28.9k Golang : Login(Authenticate) with Facebook example
+10.4k Golang : Simple image viewer with Go-GTK
+15.9k Golang : Check if a string contains multiple sub-strings in []string?
+6.1k Golang : Totalize or add-up an array or slice example
+5.3k Fix fatal error: evacuation not done in time problem
+7.1k Golang : Set horizontal, vertical scroll bars policies and disable interaction on Qt image
+9.6k Golang : Get escape characters \u form from unicode characters
+5.9k Golang : Test input string for unicode example
+22.9k Find and replace a character in a string in Go
+23.6k Golang : How to validate URL the right way
+18.7k Golang : Fix cannot download, $GOPATH not set error