Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net"
  6. "encoding/hex"
  7. "github.com/google/gopacket"
  8. "github.com/google/gopacket/layers"
  9. )
  10.  
  11. func getMplsPacket() []byte {
  12.  
  13. ipaddr := net.ParseIP("1.1.1.1")
  14.  
  15. payload := gopacket.Payload("payload")
  16.  
  17. udp := &layers.UDP{SrcPort: layers.UDPPort(2000), DstPort: layers.UDPPort(3000)}
  18.  
  19. ip := &layers.IPv4{Version: 4, DstIP: ipaddr, SrcIP: ipaddr, Protocol: layers.IPProtocolUDP}
  20.  
  21. hw, _ := net.ParseMAC("c8:b3:02:c0:b9:1b")
  22.  
  23. eth := &layers.Ethernet{SrcMAC: hw, DstMAC: hw, EthernetType: 0x8847}
  24.  
  25. mpls := &layers.MPLS{
  26. Label: 17,
  27. TrafficClass: 0,
  28. StackBottom: true,
  29. TTL: 64,
  30. }
  31.  
  32. if err := udp.SetNetworkLayerForChecksum(ip); err != nil {
  33. return nil
  34. }
  35.  
  36. buffer := gopacket.NewSerializeBuffer()
  37. if err := gopacket.SerializeLayers(buffer,
  38. gopacket.SerializeOptions{ComputeChecksums: true, FixLengths: true},
  39. eth, mpls, ip, udp, payload); err != nil {
  40. return nil
  41. }
  42.  
  43. str := hex.EncodeToString(buffer.Bytes())
  44. fmt.Println(str)
  45. return buffer.Bytes()
  46. }
  47.  
  48. func main() {
  49. fmt.Println(getMplsPacket())
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement