udp2raw/network.h

139 lines
2.9 KiB
C
Raw Normal View History

2017-07-29 12:32:26 +00:00
/*
* network.h
*
* Created on: Jul 29, 2017
* Author: wangyu
*/
#ifndef UDP2RAW_NETWORK_H_
#define UDP2RAW_NETWORK_H_
2017-07-29 12:32:26 +00:00
extern int raw_recv_fd;
extern int raw_send_fd;
extern int seq_mode;
extern int max_seq_mode;
2017-07-29 12:32:26 +00:00
extern int filter_port;
extern u32_t bind_address_uint32;
2017-07-29 12:32:26 +00:00
extern int disable_bpf_filter;
2017-08-07 05:58:42 +00:00
extern int lower_level;
extern int lower_level_manual;
2017-08-07 05:58:42 +00:00
extern char if_name[100];
2017-08-17 16:23:18 +00:00
extern unsigned char dest_hw_addr[];
2017-08-07 05:58:42 +00:00
2017-10-11 14:10:38 +00:00
extern int random_drop;
extern int ifindex;
2017-07-29 12:32:26 +00: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 11:01:50 +00:00
struct packet_info_t //todo change this to union
2017-07-29 12:32:26 +00:00
{
uint8_t protocol;
//ip_part:
u32_t src_ip;
2017-07-29 12:32:26 +00:00
uint16_t src_port;
u32_t dst_ip;
2017-07-29 12:32:26 +00:00
uint16_t dst_port;
//tcp_part:
bool syn,ack,psh,rst;
u32_t seq,ack_seq;
2017-08-01 12:14:13 +00:00
u32_t ack_seq_counter;
2017-07-29 12:32:26 +00:00
u32_t ts,ts_ack;
2017-07-29 12:32:26 +00:00
uint16_t icmp_seq;
bool has_ts;
sockaddr_ll addr_ll;
2017-09-06 06:31:29 +00:00
i32_t data_len;
packet_info_t();
2017-07-29 12:32:26 +00:00
};
struct raw_info_t
{
packet_info_t send_info;
packet_info_t recv_info;
2017-09-06 06:31:29 +00:00
//int last_send_len;
//int last_recv_len;
2017-09-06 06:37:14 +00:00
u32_t reserved_send_seq;
//uint32_t first_seq,first_ack_seq;
2018-02-24 23:26:29 +00:00
int rst_received=0;
bool disabled=0;
2017-08-01 12:14:13 +00:00
2017-07-29 12:32:26 +00:00
};//g_raw_info;
int init_raw_socket();
void init_filter(int port);
void remove_filter();
2017-09-23 08:05:23 +00:00
int init_ifindex(const char * if_name,int &index);
2017-07-29 12:32:26 +00:00
int find_lower_level_info(u32_t ip,u32_t &dest_ip,string &if_name,string &hw);
2017-07-29 12:32:26 +00:00
2017-09-23 08:05:23 +00:00
int get_src_adress(u32_t &ip,u32_t remote_ip_uint32,int remote_port); //a trick to get src adress for a dest adress,so that we can use the src address in raw socket as source ip
int try_to_list_and_bind(int & bind_fd,u32_t local_ip_uint32,int port); //try to bind to a port,may fail.
2017-09-23 08:05:23 +00:00
int client_bind_to_a_new_port(int & bind_fd,u32_t local_ip_uint32);//find a free port and bind to it.
2017-09-23 08:05:23 +00:00
2017-07-29 12:32:26 +00:00
int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen);
int peek_raw(packet_info_t &peek_info);
2017-07-29 12:32:26 +00: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-03 19:29:53 +00:00
//int send_raw(raw_info_t &raw_info,const char * payload,int payloadlen);
2017-07-29 12:32:26 +00:00
2017-08-03 19:29:53 +00:00
//int recv_raw(raw_info_t &raw_info,char * &payload,int &payloadlen);
2017-07-29 12:32:26 +00: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 12:32:26 +00:00
int after_recv_raw0(raw_info_t &raw_info);
2017-07-29 12:32:26 +00:00
#endif /* NETWORK_H_ */