ip_layer.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import socket
  2. import struct
  3. from ip_packet import IPPacket
  4. class IPLayer:
  5. rc = None
  6. ss = None
  7. src = None
  8. def __init__(self):
  9. self.rc = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  10. self.ss = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
  11. self.ss.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, True)
  12. self.src = IPLayer.get_ip_address()
  13. def send(self, dst, data):
  14. packet = IPPacket()
  15. print("IP packet: ", data)
  16. packet.src = socket.inet_aton(self.src)
  17. packet.dst = socket.inet_aton(dst)
  18. packet.data = data
  19. foo = packet.to_hex_string()
  20. print(len(foo), foo)
  21. self.ss.sendto(foo, (dst, 0))
  22. return
  23. # self.ss.sendto(packet.to_hex_string(), (dst, 0))
  24. @staticmethod
  25. def get_ip_address():
  26. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  27. s.connect(("8.8.8.8", 80))
  28. return s.getsockname()[0]
  29. def main():
  30. ip_layer = IPLayer()
  31. print(ip_layer.get_ip_address())
  32. if __name__ == "__main__":
  33. main()