Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

service_linux_test.go 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //go:build linux
  2. package desync
  3. import (
  4. "encoding/binary"
  5. "testing"
  6. "github.com/stretchr/testify/require"
  7. "golang.org/x/sys/unix"
  8. )
  9. func TestBuildAndParseIPv4TCPPacket(t *testing.T) {
  10. src := [4]byte{192, 0, 2, 10}
  11. dst := [4]byte{198, 51, 100, 20}
  12. ipPacket := buildIPv4TCPPacket(src, dst, 12345, 9595, 100, 200, 1)
  13. require.Len(t, ipPacket, 20+20+len(fakeTLSAlert))
  14. require.Equal(t, byte(64), ipPacket[8])
  15. require.Equal(t, byte(unix.IPPROTO_TCP), ipPacket[9])
  16. require.Equal(t, uint16(12345), binary.BigEndian.Uint16(ipPacket[20:22]))
  17. require.Equal(t, uint16(9595), binary.BigEndian.Uint16(ipPacket[22:24]))
  18. require.Equal(t, uint32(100), binary.BigEndian.Uint32(ipPacket[24:28]))
  19. require.Equal(t, uint32(200), binary.BigEndian.Uint32(ipPacket[28:32]))
  20. require.Equal(t, byte(tcpFlagPsh|tcpFlagAck), ipPacket[33])
  21. wireSum := binary.BigEndian.Uint16(ipPacket[36:38])
  22. tcp := append([]byte(nil), ipPacket[20:40]...)
  23. binary.BigEndian.PutUint16(tcp[16:18], 0)
  24. validSum := tcpChecksum(src, dst, tcp)
  25. require.Equal(t, validSum^0xffff, wireSum)
  26. frame := make([]byte, 14+len(ipPacket))
  27. binary.BigEndian.PutUint16(frame[12:14], unix.ETH_P_IP)
  28. copy(frame[14:], ipPacket)
  29. packet, ok := parseIPv4TCP(frame)
  30. require.True(t, ok)
  31. require.Equal(t, [4]byte{192, 0, 2, 10}, packet.srcIP)
  32. require.Equal(t, [4]byte{198, 51, 100, 20}, packet.dstIP)
  33. require.Equal(t, uint16(12345), packet.srcPort)
  34. require.Equal(t, uint16(9595), packet.dstPort)
  35. require.Equal(t, uint32(100), packet.seq)
  36. require.Equal(t, uint32(200), packet.ack)
  37. require.Equal(t, byte(tcpFlagPsh|tcpFlagAck), packet.flags)
  38. }