diff --git a/common.cpp b/common.cpp index c50d5d3..dcecb1b 100644 --- a/common.cpp +++ b/common.cpp @@ -86,11 +86,15 @@ u32_t get_true_random_number_nz() //nz for non-zero } return ret; } + u64_t ntoh64(u64_t a) { if(__BYTE_ORDER == __LITTLE_ENDIAN) { - return bswap_64( a); + u32_t h=get_u64_h(a); + u32_t l=get_u64_l(a); + return pack_u64(ntohl(l),ntohl(h)); + //return bswap_64( a); } else return a; @@ -99,7 +103,10 @@ u64_t hton64(u64_t a) { if(__BYTE_ORDER == __LITTLE_ENDIAN) { - return bswap_64( a); + u32_t h=get_u64_h(a); + u32_t l=get_u64_l(a); + return pack_u64(ntohl(l),ntohl(h)); + //return bswap_64( a); } else return a; diff --git a/main.cpp b/main.cpp index 96d5600..e703d95 100755 --- a/main.cpp +++ b/main.cpp @@ -282,9 +282,9 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p if(conn_info.state.client_current_state==client_idle ) { //recv(raw_recv_fd, 0,0, 0 ); - pthread_mutex_lock(&queue_mutex); - my_queue.pop_front(); - pthread_mutex_unlock(&queue_mutex); + //pthread_mutex_lock(&queue_mutex); + //my_queue.pop_front(); + //pthread_mutex_unlock(&queue_mutex); } else if(conn_info.state.client_current_state==client_tcp_handshake)//received syn ack { diff --git a/misc.cpp b/misc.cpp index a0b3d23..0c0fea4 100644 --- a/misc.cpp +++ b/misc.cpp @@ -85,6 +85,7 @@ int force_socket_buf=0; //char lower_level_arg[1000]; +/* int process_lower_level_arg()//handle --lower-level option { lower_level=1; @@ -112,7 +113,7 @@ int process_lower_level_arg()//handle --lower-level option dest_hw_addr[i] = uint8_t(hw[i]); } return 0; -} +}*/ void print_help() { char git_version_buf[100]={0}; @@ -1058,7 +1059,7 @@ int set_timer(int epollfd,int &timer_fd)//put a timer_fd into epoll,general func return 0; }*/ - +/* int set_timer_server(int epollfd,int &timer_fd,fd64_t &fd64)//only for server { int ret; @@ -1120,7 +1121,7 @@ int handle_lower_level(raw_info_t &raw_info)//fill lower_level info,when --lower } return 0; } - +*/ string chain[2]; string rule_keep[2]; diff --git a/network.cpp b/network.cpp index 2721579..481b4a9 100644 --- a/network.cpp +++ b/network.cpp @@ -23,7 +23,7 @@ int disable_bpf_filter=0; //for test only,most time no need to disable this u32_t bind_address_uint32=0; -int lower_level=0; +//int lower_level=0; int lower_level_manual=0; int ifindex=-1; char if_name[100]=""; @@ -32,8 +32,8 @@ char dev[100]=""; unsigned short g_ip_id_counter=0; -unsigned char dest_hw_addr[sizeof(sockaddr_ll::sll_addr)]= - {0xff,0xff,0xff,0xff,0xff,0xff,0,0}; +//unsigned char dest_hw_addr[sizeof(sockaddr_ll::sll_addr)]= + // {0xff,0xff,0xff,0xff,0xff,0xff,0,0}; //{0x00,0x23,0x45,0x67,0x89,0xb9}; const u32_t receive_window_lower_bound=40960; @@ -58,6 +58,7 @@ char g_packet_buf[buf_len]; //dirty code, fix it later int g_packet_buf_len=1; int g_packet_buf_cnt=0; +/* struct sock_filter code_tcp_old[] = { { 0x28, 0, 0, 0x0000000c },//0 { 0x15, 0, 10, 0x00000800 },//1 @@ -109,7 +110,7 @@ struct sock_filter code_icmp[] = { { 0x15, 0, 1, 0x00000001 }, { 0x6, 0, 0, 0x0000ffff }, { 0x6, 0, 0, 0x00000000 }, -}; +};*/ /* @@ -314,6 +315,8 @@ int init_raw_socket() g_ip_id_counter=get_true_random_number()%65535; + + /* if(lower_level==0) { raw_send_fd = socket(AF_INET , SOCK_RAW , IPPROTO_TCP); @@ -398,17 +401,19 @@ int init_raw_socket() setnonblocking(raw_send_fd); //not really necessary - setnonblocking(raw_recv_fd); + setnonblocking(raw_recv_fd);*/ return 0; } void init_filter(int port) { - sock_fprog bpf; + /* + sock_fprog bpf;*/ if(raw_mode==mode_faketcp||raw_mode==mode_udp) { filter_port=port; } + /* if(disable_bpf_filter) return; //if(raw_mode==mode_icmp) return ; //code_tcp[8].k=code_tcp[10].k=port; @@ -445,7 +450,7 @@ void init_filter(int port) mylog(log_fatal,"error set fiter\n"); //perror("filter"); myexit(-1); - } + }*/ } void remove_filter() { @@ -538,6 +543,7 @@ vector find_route_entry(const vector &route_info_vec,u32_t ip } return res; } +/* int find_direct_dest(const vector &route_info_vec,u32_t ip,u32_t &dest_ip,string &if_name) { vector res; @@ -568,7 +574,7 @@ int find_direct_dest(const vector &route_info_vec,u32_t ip,u32_t & } mylog(log_error,"dead loop in find_direct_dest\n"); return -1; -} +}*/ struct arp_info_t { u32_t ip; @@ -609,6 +615,7 @@ int find_arp(const vector &arp_info_vec,u32_t ip,string if_name,stri hw=arp_info_vec[pos].hw; return 0; } +/* int find_lower_level_info(u32_t ip,u32_t &dest_ip,string &if_name,string &hw) { ip=htonl(ip); @@ -697,7 +704,7 @@ int find_lower_level_info(u32_t ip,u32_t &dest_ip,string &if_name,string &hw) dest_ip=ntohl(dest_ip); return 0; -} +}*/ int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen) @@ -720,12 +727,12 @@ int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen) iph->version = 4; iph->tos = 0; - if(lower_level) + /* if(lower_level) { //iph->id=0; iph->id = htons (g_ip_id_counter++); //Id of this packet } - else + else*/ iph->id = htons (g_ip_id_counter++); //Id of this packet //iph->id = 0; //Id of this packet ,kernel will auto fill this if id is zero ,or really?????// todo //seems like there is a problem @@ -738,15 +745,15 @@ int send_raw_ip(raw_info_t &raw_info,const char * payload,int payloadlen) iph->daddr = send_info.dst_ip; uint16_t ip_tot_len=sizeof (struct iphdr)+payloadlen; - if(lower_level)iph->tot_len = htons(ip_tot_len); //this is not necessary ,kernel will always auto fill this //http://man7.org/linux/man-pages/man7/raw.7.html - else + /* if(lower_level)iph->tot_len = htons(ip_tot_len); //this is not necessary ,kernel will always auto fill this //http://man7.org/linux/man-pages/man7/raw.7.html + else*/ iph->tot_len = 0; memcpy(send_raw_ip_buf+sizeof(iphdr) , payload, payloadlen); - if(lower_level) iph->check = + /*if(lower_level) iph->check = csum ((unsigned short *) send_raw_ip_buf, iph->ihl*4); //this is not necessary ,kernel will always auto fill this - else + else*/ iph->check=0; int ret; @@ -862,8 +869,8 @@ int recv_raw_ip(raw_info_t &raw_info,char * &payload,int &payloadlen) //static char recv_raw_ip_buf[buf_len]; iphdr * iph; - struct sockaddr_ll saddr={0}; - socklen_t saddr_size = sizeof(saddr); + /*struct sockaddr_ll saddr={0}; + socklen_t saddr_size = sizeof(saddr);*/ int flag=0; //int recv_len = recvfrom(raw_recv_fd, recv_raw_ip_buf, max_data_len+1, flag ,(sockaddr*)&saddr , &saddr_size); @@ -904,10 +911,11 @@ int recv_raw_ip(raw_info_t &raw_info,char * &payload,int &payloadlen) recv_info.dst_ip=iph->daddr; recv_info.protocol=iph->protocol; + /* if(lower_level) { memcpy(&recv_info.addr_ll,&saddr,sizeof(recv_info.addr_ll)); - } + }*/ if(bind_address_uint32!=0 &&recv_info.dst_ip!=bind_address_uint32) diff --git a/network.h b/network.h index ca39844..2fd220f 100644 --- a/network.h +++ b/network.h @@ -16,8 +16,8 @@ extern int filter_port; extern u32_t bind_address_uint32; extern int disable_bpf_filter; -extern int lower_level; -extern int lower_level_manual; +//extern int lower_level; +//extern int lower_level_manual; extern char if_name[100]; extern unsigned char dest_hw_addr[]; @@ -80,7 +80,7 @@ struct packet_info_t //todo change this to union bool has_ts; - sockaddr_ll addr_ll; + //sockaddr_ll addr_ll; i32_t data_len;