2017-07-29 20:32:26 +08:00
|
|
|
/*
|
|
|
|
* network.h
|
|
|
|
*
|
|
|
|
* Created on: Jul 29, 2017
|
|
|
|
* Author: wangyu
|
|
|
|
*/
|
|
|
|
|
2017-09-01 17:40:55 -05:00
|
|
|
#ifndef UDP2RAW_NETWORK_H_
|
|
|
|
#define UDP2RAW_NETWORK_H_
|
2017-07-29 20:32:26 +08:00
|
|
|
|
|
|
|
extern int raw_recv_fd;
|
|
|
|
extern int raw_send_fd;
|
|
|
|
extern int seq_mode;
|
2017-09-06 05:31:29 -05:00
|
|
|
extern int max_seq_mode;
|
2017-07-29 20:32:26 +08:00
|
|
|
extern int filter_port;
|
2017-08-04 17:12:23 +08:00
|
|
|
extern u32_t bind_address_uint32;
|
2017-07-29 20:32:26 +08:00
|
|
|
extern int disable_bpf_filter;
|
|
|
|
|
2017-08-07 13:58:42 +08:00
|
|
|
extern int lower_level;
|
2017-08-21 20:26:55 +08:00
|
|
|
extern int lower_level_manual;
|
2017-08-07 13:58:42 +08:00
|
|
|
extern char if_name[100];
|
2017-08-18 00:23:18 +08:00
|
|
|
extern unsigned char dest_hw_addr[];
|
2017-08-07 13:58:42 +08:00
|
|
|
|
2017-08-21 20:26:55 +08:00
|
|
|
extern int ifindex;
|
|
|
|
|
2017-07-29 20:32:26 +08:00
|
|
|
struct icmphdr
|
|
|
|
{
|
|
|
|
uint8_t type;
|
|
|
|
uint8_t code;
|
|
|
|
uint16_t check_sum;
|
|
|
|
uint16_t id;
|
|
|
|
uint16_t seq;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct pseudo_header {
|
|
|
|
u_int32_t source_address;
|
|
|
|
u_int32_t dest_address;
|
|
|
|
u_int8_t placeholder;
|
|
|
|
u_int8_t protocol;
|
|
|
|
u_int16_t tcp_length;
|
|
|
|
};
|
|
|
|
|
2017-07-31 19:01:50 +08:00
|
|
|
struct packet_info_t //todo change this to union
|
2017-07-29 20:32:26 +08:00
|
|
|
{
|
|
|
|
uint8_t protocol;
|
|
|
|
//ip_part:
|
2017-08-04 17:12:23 +08:00
|
|
|
u32_t src_ip;
|
2017-07-29 20:32:26 +08:00
|
|
|
uint16_t src_port;
|
|
|
|
|
2017-08-04 17:12:23 +08:00
|
|
|
u32_t dst_ip;
|
2017-07-29 20:32:26 +08:00
|
|
|
uint16_t dst_port;
|
|
|
|
|
|
|
|
//tcp_part:
|
|
|
|
bool syn,ack,psh,rst;
|
|
|
|
|
2017-08-04 17:12:23 +08:00
|
|
|
u32_t seq,ack_seq;
|
2017-08-01 20:14:13 +08:00
|
|
|
|
2017-09-06 05:31:29 -05:00
|
|
|
u32_t ack_seq_counter;
|
2017-07-29 20:32:26 +08:00
|
|
|
|
2017-08-04 17:12:23 +08:00
|
|
|
u32_t ts,ts_ack;
|
2017-07-29 20:32:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
uint16_t icmp_seq;
|
|
|
|
|
|
|
|
bool has_ts;
|
2017-08-21 20:26:55 +08:00
|
|
|
|
|
|
|
sockaddr_ll addr_ll;
|
|
|
|
|
2017-09-06 01:31:29 -05:00
|
|
|
i32_t data_len;
|
|
|
|
|
2017-07-30 03:46:28 +08:00
|
|
|
packet_info_t();
|
2017-07-29 20:32:26 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct raw_info_t
|
|
|
|
{
|
|
|
|
packet_info_t send_info;
|
|
|
|
packet_info_t recv_info;
|
2017-08-03 23:32:19 +08:00
|
|
|
|
2017-09-06 01:31:29 -05:00
|
|
|
//int last_send_len;
|
|
|
|
//int last_recv_len;
|
2017-08-03 23:32:19 +08:00
|
|
|
|
2017-09-06 01:37:14 -05:00
|
|
|
u32_t reserved_send_seq;
|
2017-08-03 23:32:19 +08:00
|
|
|
//uint32_t first_seq,first_ack_seq;
|
2017-08-01 20:14:13 +08:00
|
|
|
|
2017-07-29 20:32:26 +08:00
|
|
|
};//g_raw_info;
|
|
|
|
|
|
|
|
|
|
|
|
int init_raw_socket();
|
|
|
|
|
|
|
|
void init_filter(int port);
|
|
|
|
|
|
|
|
void remove_filter();
|
2017-08-26 05:38:33 -05:00
|
|
|
int init_ifindex(const char * if_name,int &index);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
2017-08-26 05:38:33 -05:00
|
|
|
int find_lower_level_info(u32_t ip,u32_t &dest_ip,string &if_name,string &hw);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
|
|
|
int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen);
|
|
|
|
|
2017-08-03 23:32:19 +08:00
|
|
|
int peek_raw(packet_info_t &peek_info);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
|
|
|
int recv_raw_ip(raw_info_t &raw_info,char * &payload,int &payloadlen);
|
|
|
|
|
|
|
|
int send_raw_icmp(raw_info_t &raw_info, const char * payload, int payloadlen);
|
|
|
|
|
|
|
|
int send_raw_udp(raw_info_t &raw_info, const char * payload, int payloadlen);
|
|
|
|
|
|
|
|
int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen);
|
|
|
|
|
|
|
|
int recv_raw_icmp(raw_info_t &raw_info, char *&payload, int &payloadlen);
|
|
|
|
|
|
|
|
int recv_raw_udp(raw_info_t &raw_info, char *&payload, int &payloadlen);
|
|
|
|
|
|
|
|
int recv_raw_tcp(raw_info_t &raw_info,char * &payload,int &payloadlen);
|
|
|
|
|
2017-08-04 03:29:53 +08:00
|
|
|
//int send_raw(raw_info_t &raw_info,const char * payload,int payloadlen);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
2017-08-04 03:29:53 +08:00
|
|
|
//int recv_raw(raw_info_t &raw_info,char * &payload,int &payloadlen);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
2017-08-03 23:32:19 +08:00
|
|
|
int send_raw0(raw_info_t &raw_info,const char * payload,int payloadlen);
|
|
|
|
|
|
|
|
int recv_raw0(raw_info_t &raw_info,char * &payload,int &payloadlen);
|
|
|
|
|
|
|
|
int after_send_raw0(raw_info_t &raw_info);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
2017-08-03 23:32:19 +08:00
|
|
|
int after_recv_raw0(raw_info_t &raw_info);
|
2017-07-29 20:32:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
#endif /* NETWORK_H_ */
|