network.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 u32_t bind_address_uint32;
  14. extern int disable_bpf_filter;
  15. extern int lower_level;
  16. extern char if_name[100];
  17. extern unsigned char oppsite_hw_addr[];
  18. struct icmphdr
  19. {
  20. uint8_t type;
  21. uint8_t code;
  22. uint16_t check_sum;
  23. uint16_t id;
  24. uint16_t seq;
  25. };
  26. struct pseudo_header {
  27. u_int32_t source_address;
  28. u_int32_t dest_address;
  29. u_int8_t placeholder;
  30. u_int8_t protocol;
  31. u_int16_t tcp_length;
  32. };
  33. struct packet_info_t //todo change this to union
  34. {
  35. uint8_t protocol;
  36. //ip_part:
  37. u32_t src_ip;
  38. uint16_t src_port;
  39. u32_t dst_ip;
  40. uint16_t dst_port;
  41. //tcp_part:
  42. bool syn,ack,psh,rst;
  43. u32_t seq,ack_seq;
  44. u32_t ts,ts_ack;
  45. uint16_t icmp_seq;
  46. bool has_ts;
  47. packet_info_t();
  48. };
  49. struct raw_info_t
  50. {
  51. packet_info_t send_info;
  52. packet_info_t recv_info;
  53. int last_send_len;
  54. int last_recv_len;
  55. u32_t reserved_seq;
  56. //uint32_t first_seq,first_ack_seq;
  57. };//g_raw_info;
  58. int init_raw_socket();
  59. void init_filter(int port);
  60. void remove_filter();
  61. int init_ifindex(char * if_name);
  62. int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen);
  63. int peek_raw(packet_info_t &peek_info);
  64. int recv_raw_ip(raw_info_t &raw_info,char * &payload,int &payloadlen);
  65. int send_raw_icmp(raw_info_t &raw_info, const char * payload, int payloadlen);
  66. int send_raw_udp(raw_info_t &raw_info, const char * payload, int payloadlen);
  67. int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen);
  68. int recv_raw_icmp(raw_info_t &raw_info, char *&payload, int &payloadlen);
  69. int recv_raw_udp(raw_info_t &raw_info, char *&payload, int &payloadlen);
  70. int recv_raw_tcp(raw_info_t &raw_info,char * &payload,int &payloadlen);
  71. //int send_raw(raw_info_t &raw_info,const char * payload,int payloadlen);
  72. //int recv_raw(raw_info_t &raw_info,char * &payload,int &payloadlen);
  73. int send_raw0(raw_info_t &raw_info,const char * payload,int payloadlen);
  74. int recv_raw0(raw_info_t &raw_info,char * &payload,int &payloadlen);
  75. int after_send_raw0(raw_info_t &raw_info);
  76. int after_recv_raw0(raw_info_t &raw_info);
  77. #endif /* NETWORK_H_ */