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
+10.1k CodeIgniter : How to check if a session exist in PHP?
+4.3k Responsive Google Adsense
+20.4k Golang : Use TLS version 1.2 and enforce server security configuration over client
+6k Golang : Squaring elements in array
+7.1k Golang : Reverse text lines or flip line order example
+9.5k Golang : Create matrix with Gonum Matrix package example
+3.3k Golang : Converting individual Jawi alphabet to Rumi(Romanized) alphabet example
+4.2k Golang *File points to a file or directory ?
+7.8k Golang : Capture text return from exec function example
+17.7k Golang : When to use public and private identifier(variable) and how to make the identifier public or private?
+10.5k Golang : Change date format to yyyy-mm-dd
+4.4k Golang : If else example and common mistake