packet_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package iputil
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "golang.org/x/net/ipv4"
  7. )
  8. func Test_CreateRejectPacket(t *testing.T) {
  9. h := ipv4.Header{
  10. Len: 20,
  11. Src: net.IPv4(10, 0, 0, 1),
  12. Dst: net.IPv4(10, 0, 0, 2),
  13. Protocol: 1, // ICMP
  14. }
  15. b, err := h.Marshal()
  16. if err != nil {
  17. t.Fatalf("h.Marhshal: %v", err)
  18. }
  19. b = append(b, []byte{0, 3, 0, 4}...)
  20. expectedLen := ipv4.HeaderLen + 8 + h.Len + 4
  21. out := make([]byte, expectedLen)
  22. rejectPacket := CreateRejectPacket(b, out)
  23. assert.NotNil(t, rejectPacket)
  24. assert.Len(t, rejectPacket, expectedLen)
  25. // ICMP with max header len
  26. h = ipv4.Header{
  27. Len: 60,
  28. Src: net.IPv4(10, 0, 0, 1),
  29. Dst: net.IPv4(10, 0, 0, 2),
  30. Protocol: 1, // ICMP
  31. Options: make([]byte, 40),
  32. }
  33. b, err = h.Marshal()
  34. if err != nil {
  35. t.Fatalf("h.Marhshal: %v", err)
  36. }
  37. b = append(b, []byte{0, 3, 0, 4, 0, 0, 0, 0}...)
  38. expectedLen = MaxRejectPacketSize
  39. out = make([]byte, MaxRejectPacketSize)
  40. rejectPacket = CreateRejectPacket(b, out)
  41. assert.NotNil(t, rejectPacket)
  42. assert.Len(t, rejectPacket, expectedLen)
  43. // TCP with max header len
  44. h = ipv4.Header{
  45. Len: 60,
  46. Src: net.IPv4(10, 0, 0, 1),
  47. Dst: net.IPv4(10, 0, 0, 2),
  48. Protocol: 6, // TCP
  49. Options: make([]byte, 40),
  50. }
  51. b, err = h.Marshal()
  52. if err != nil {
  53. t.Fatalf("h.Marhshal: %v", err)
  54. }
  55. b = append(b, []byte{0, 3, 0, 4}...)
  56. b = append(b, make([]byte, 16)...)
  57. expectedLen = ipv4.HeaderLen + 20
  58. out = make([]byte, expectedLen)
  59. rejectPacket = CreateRejectPacket(b, out)
  60. assert.NotNil(t, rejectPacket)
  61. assert.Len(t, rejectPacket, expectedLen)
  62. }