proto
1.0.0
린(Lean)은 프로토콜 디코딩 및 인코딩을 의미합니다.
package main
import (
"log"
"github.com/PreetamJinka/proto"
)
func main () {
b := [] byte {
0 , 15 , 248 , 20 , 48 , 0 , 0 , 37 , 144 , 82 , 230 , 31 ,
134 , 221 , 96 , 0 , 0 , 0 , 0 , 40 , 6 , 64 , 38 , 32 , 1 ,
0 , 80 , 7 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 3 , 38 , 32 ,
1 , 0 , 80 , 7 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 217 ,
104 , 0 , 80 , 184 , 89 , 70 , 22 , 0 , 0 , 0 , 0 , 160 , 2 ,
22 , 128 , 239 , 131 , 0 , 0 , 2 , 4 , 5 , 160 , 4 , 2 , 8 ,
10 , 184 , 73 , 195 , 65 , 0 , 0 , 0 , 0 , 1 , 3 , 3 , 7 ,
}
ethernetFrame , err := proto . DecodeEthernet ( b )
if err != nil {
log . Fatal ( err )
}
if ethernetFrame . EtherType != 0x86dd {
log . Fatalf ( "expected to see EtherType %x, got %x" , 0x86dd , ethernetFrame . EtherType )
}
ipv6Packet , err := proto . DecodeIPv6 ( ethernetFrame . Payload )
if err != nil {
log . Fatal ( err )
}
log . Printf ( "Decoded an IPv6 packet: %#+v" , ipv6Packet )
if ipv6Packet . NextHeader != 0x6 {
log . Fatalf ( "expected to see NextHeader %x, got %x" , 0x6 , ipv6Packet . NextHeader )
}
tcpPacket , err := proto . DecodeTCP ( ipv6Packet . Payload )
if err != nil {
log . Fatal ( err )
}
log . Printf ( "Decoded a TCP packet: %#+v" , tcpPacket )
}
페이로드는 복사되지 않고 하위 슬라이스이므로 디코딩 중인 버퍼를 재사용하는 경우 복사본을 만드는 것이 좋습니다.
TCP 및 UDP 인코딩은 구현되지 않습니다.
BSD(라이센스 참조)