Advertisement
Guest User

Untitled

a guest
Aug 24th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. import os
  2. from fcntl import ioctl
  3. import struct
  4. import time
  5. import random
  6. from threading import Thread
  7.  
  8. from pyroute2 import IPRoute
  9. from pypacker.layer3.ip import IP
  10. from pypacker.layer3.ip6 import IP6
  11. from pypacker.layer3.icmp import ICMP
  12.  
  13.  
  14. TUNSETIFF = 0x400454ca
  15. IFF_TUN = 0x0001
  16. IFF_TAP = 0x0002
  17. IFF_NO_PI = 0x1000
  18.  
  19.  
  20. def main():
  21. fid = os.open("/dev/net/tun", os.O_RDWR)
  22. ioctl(fid, TUNSETIFF, struct.pack("16sH", b"tun0", IFF_TUN | IFF_NO_PI))
  23. set_addr('tun0', '10.0.0.1')
  24.  
  25. read_thread = Thread(target=read_input, args=(fid,))
  26. read_thread.start()
  27.  
  28. req_nr = 1
  29. req_id = random.randint(1, 65000)
  30. while True:
  31. icmp_req = IP(src_s="10.0.0.4", dst_s="8.8.8.8", p=1) +\
  32. ICMP(type=8) +\
  33. ICMP.Echo(id=req_id, seq=req_nr, body_bytes=b"test")
  34. os.write(fid, icmp_req.bin())
  35. time.sleep(1)
  36. req_nr += 1
  37.  
  38.  
  39. def read_input(fid) -> None:
  40. while True:
  41. data = os.read(fid, 1500)
  42. parse_packet(data)
  43.  
  44.  
  45. def parse_packet(data: bytes):
  46. try:
  47. packet = IP(data)
  48. except:
  49. packet = IP6(data)
  50. print(packet)
  51. print()
  52.  
  53.  
  54. def set_addr(dev: str, addr: str) -> None:
  55. ip = IPRoute()
  56. idx = ip.link_lookup(ifname=dev)[0]
  57. ip.addr('add', index=idx, address=addr, prefixlen=24)
  58. ip.link('set', index=idx, state='up')
  59. ip.close()
  60.  
  61.  
  62. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement