network.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * network.h
  3. *
  4. * Created on: Jul 29, 2017
  5. * Author: wangyu
  6. */
  7. #ifndef NETWORK_H_
  8. #define NETWORK_H_
  9. extern int raw_recv_fd;
  10. extern int raw_send_fd;
  11. extern int seq_mode;
  12. extern int filter_port;
  13. extern uint32_t bind_address_uint32;
  14. extern int disable_bpf_filter;
  15. struct icmphdr
  16. {
  17. uint8_t type;
  18. uint8_t code;
  19. uint16_t check_sum;
  20. uint16_t id;
  21. uint16_t seq;
  22. };
  23. struct pseudo_header {
  24. u_int32_t source_address;
  25. u_int32_t dest_address;
  26. u_int8_t placeholder;
  27. u_int8_t protocol;
  28. u_int16_t tcp_length;
  29. };
  30. struct packet_info_t
  31. {
  32. uint8_t protocol;
  33. //ip_part:
  34. uint32_t src_ip;
  35. uint16_t src_port;
  36. uint32_t dst_ip;
  37. uint16_t dst_port;
  38. //tcp_part:
  39. bool syn,ack,psh,rst;
  40. uint32_t seq,ack_seq;
  41. uint32_t ts,ts_ack;
  42. uint16_t icmp_seq;
  43. bool has_ts;
  44. packet_info_t();
  45. };
  46. struct raw_info_t
  47. {
  48. packet_info_t send_info;
  49. packet_info_t recv_info;
  50. };//g_raw_info;
  51. int init_raw_socket();
  52. void init_filter(int port);
  53. void remove_filter();
  54. int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen);
  55. int peek_raw(uint32_t &ip,uint16_t &port);
  56. int recv_raw_ip(raw_info_t &raw_info,char * &payload,int &payloadlen);
  57. int send_raw_icmp(raw_info_t &raw_info, const char * payload, int payloadlen);
  58. int send_raw_udp(raw_info_t &raw_info, const char * payload, int payloadlen);
  59. int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen);
  60. int recv_raw_icmp(raw_info_t &raw_info, char *&payload, int &payloadlen);
  61. int recv_raw_udp(raw_info_t &raw_info, char *&payload, int &payloadlen);
  62. int recv_raw_tcp(raw_info_t &raw_info,char * &payload,int &payloadlen);
  63. int send_raw(raw_info_t &raw_info,const char * payload,int payloadlen);
  64. int recv_raw(raw_info_t &raw_info,char * &payload,int &payloadlen);
  65. #endif /* NETWORK_H_ */