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
+20.4k Golang : How to get own program name during runtime ?
+6.2k PageSpeed : Clear or flush cache on web server
+16k Golang : ROT47 (Caesar cipher by 47 characters) example
+12.4k Golang : Display list of countries and ISO codes
+18.8k Golang : Iterating Elements Over A List
+48.7k Golang : Upload file from web browser to server
+11.4k Golang : Intercept and process UNIX signals example
+10.3k Golang : Check a web page existence with HEAD request example
+6.2k Golang : Scan forex opportunities by Bollinger bands
+12.8k Golang : Send data to /dev/null a.k.a blackhole with ioutil.Discard
+5.4k PHP : Hide PHP version information from curl
+11.1k Golang : Create S3 bucket with official aws-sdk-go package