mirror of
https://github.com/wangyu-/udp2raw.git
synced 2025-01-19 14:29:34 +08:00
seq mode 3 and 4,include git version in help page
This commit is contained in:
parent
178327c581
commit
9472fe8bb3
17
main.cpp
17
main.cpp
@ -3,6 +3,7 @@
|
||||
#include "log.h"
|
||||
#include "lib/md5.h"
|
||||
#include "encrypt.h"
|
||||
#include "git_version.h"
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -2579,8 +2580,11 @@ int process_lower_level_arg()//handle --lower-level option
|
||||
}
|
||||
void print_help()
|
||||
{
|
||||
char git_version_buf[100]={0};
|
||||
strncpy(git_version_buf,gitversion,10);
|
||||
printf("udp2raw-tunnel\n");
|
||||
printf("version: %s %s\n",__DATE__,__TIME__);
|
||||
printf("build date:%s %s\n",__DATE__,__TIME__);
|
||||
printf("git version: %s\n",git_version_buf);
|
||||
printf("repository: https://github.com/wangyu-/udp2raw-tunnel\n");
|
||||
printf("\n");
|
||||
printf("usage:\n");
|
||||
@ -2617,9 +2621,12 @@ void print_help()
|
||||
printf(" --sock-buf <number> buf size for socket,>=10 and <=10240,unit:kbyte,default:1024\n");
|
||||
printf(" --force-sock-buf bypass system limitation while setting sock-buf\n");
|
||||
printf(" --seqmode <number> seq increase mode for faketcp:\n");
|
||||
printf(" 0:dont increase\n");
|
||||
printf(" 1:increase every packet(default)\n");
|
||||
printf(" 2:increase randomly, about every 3 packets\n");
|
||||
printf(" 0:static header,do not increase seq and ack_seq\n");
|
||||
printf(" 1:increase seq for every packet,simply ack last seq\n");
|
||||
printf(" 2:increase seq randomly, about every 3 packets,simply ack last seq\n");
|
||||
printf(" 3:simulate an almost real seq/ack procedure(default)\n");
|
||||
printf(" 4:similiar to 3,but do not consider TCP Option Window_Scale,\n");
|
||||
printf(" maybe useful when firewall doesnt support TCP Option \n");
|
||||
// printf("\n");
|
||||
printf(" --lower-level <string> send packets at OSI level 2, format:'if_name#dest_mac_adress'\n");
|
||||
printf(" ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain\n");
|
||||
@ -3063,7 +3070,7 @@ void process_arg(int argc, char *argv[]) //process all options
|
||||
else if(strcmp(long_options[option_index].name,"seq-mode")==0)
|
||||
{
|
||||
sscanf(optarg,"%d",&seq_mode);
|
||||
if(0<=seq_mode&&seq_mode<=3)
|
||||
if(0<=seq_mode&&seq_mode<=max_seq_mode)
|
||||
{
|
||||
}
|
||||
else
|
||||
|
34
makefile
34
makefile
@ -13,48 +13,48 @@ NAME=udp2raw
|
||||
TARGETS=amd64 mips34kc arm amd64_hw_aes arm_asm_aes mips34kc_asm_aes x86 x86_asm_aes
|
||||
TAR=${NAME}_binaries.tar.gz `echo ${TARGETS}|sed -r 's/([^ ]+)/udp2raw_\1/g'`
|
||||
|
||||
all:
|
||||
all:git_version
|
||||
rm -f ${NAME}
|
||||
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -ggdb -static -O3
|
||||
fast:
|
||||
fast: git_version
|
||||
rm -f ${NAME}
|
||||
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -ggdb
|
||||
debug:
|
||||
debug: git_version
|
||||
rm -f ${NAME}
|
||||
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -Wformat-nonliteral -D MY_DEBUG
|
||||
debug2:
|
||||
debug2: git_version
|
||||
rm -f ${NAME}
|
||||
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -Wformat-nonliteral -ggdb
|
||||
|
||||
mips34kc:
|
||||
mips34kc: git_version
|
||||
${cc_mips34kc} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -lgcc_eh -static -O3
|
||||
|
||||
mips34kc_asm_aes:
|
||||
mips34kc_asm_aes: git_version
|
||||
${cc_mips34kc} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -lgcc_eh -static -O3 lib/aes_acc/asm/mips_be.S
|
||||
|
||||
#bcm2708:
|
||||
# ${cc_bcm2708} -o ${NAME}_bcm2708 -I. ${SOURCES} ${FLAGS} -lrt -static -O3
|
||||
amd64:
|
||||
amd64:git_version
|
||||
${cc_local} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O3
|
||||
amd64_hw_aes:
|
||||
amd64_hw_aes:git_version
|
||||
${cc_local} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -static -O3 lib/aes_acc/asm/x64.S
|
||||
x86:
|
||||
x86:git_version
|
||||
${cc_local} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O3 -m32
|
||||
x86_asm_aes:
|
||||
x86_asm_aes:git_version
|
||||
${cc_local} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -static -O3 -m32 lib/aes_acc/asm/x86.S
|
||||
arm:
|
||||
arm:git_version
|
||||
${cc_arm} -o ${NAME}_$@ -I. ${SOURCES} ${FLAGS} -lrt -static -O3
|
||||
|
||||
arm_asm_aes:
|
||||
arm_asm_aes:git_version
|
||||
${cc_arm} -o ${NAME}_$@ -I. ${SOURCES_AES_ACC} ${FLAGS} -lrt -static -O3 lib/aes_acc/asm/arm.S
|
||||
|
||||
cross:
|
||||
cross:git_version
|
||||
${cc_cross} -o ${NAME}_cross -I. ${SOURCES} ${FLAGS} -lrt -O3
|
||||
|
||||
cross2:
|
||||
cross2:git_version
|
||||
${cc_cross} -o ${NAME}_cross -I. ${SOURCES} ${FLAGS} -lrt -static -lgcc_eh -O3
|
||||
|
||||
cross3:
|
||||
cross3:git_version
|
||||
${cc_cross} -o ${NAME}_cross -I. ${SOURCES} ${FLAGS} -lrt -static -O3
|
||||
|
||||
release: ${TARGETS}
|
||||
@ -63,4 +63,8 @@ release: ${TARGETS}
|
||||
clean:
|
||||
rm -f ${TAR}
|
||||
rm -f udp2raw udp2raw_cross udp2raw_cmake
|
||||
rm -f git_version.h
|
||||
|
||||
git_version:
|
||||
echo "const char *gitversion = \"$(shell git rev-parse HEAD)\";" > git_version.h
|
||||
|
||||
|
61
network.cpp
61
network.cpp
@ -12,7 +12,8 @@ int raw_recv_fd=-1;
|
||||
int raw_send_fd=-1;
|
||||
u32_t link_level_header_len=0;//set it to 14 if SOCK_RAW is used in socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
|
||||
|
||||
int seq_mode=1;
|
||||
int seq_mode=3;
|
||||
int max_seq_mode=4;
|
||||
|
||||
int filter_port=-1;
|
||||
|
||||
@ -31,6 +32,10 @@ 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;
|
||||
const u32_t receive_window_random_range=512;
|
||||
const unsigned char wscale=0x05;
|
||||
|
||||
struct sock_filter code_tcp_old[] = {
|
||||
{ 0x28, 0, 0, 0x0000000c },//0
|
||||
{ 0x15, 0, 10, 0x00000800 },//1
|
||||
@ -146,6 +151,7 @@ packet_info_t::packet_info_t()
|
||||
ts_ack=0;
|
||||
syn=0;
|
||||
ack=1;
|
||||
ack_seq_counter=0;
|
||||
|
||||
//mylog(log_info,"<cons ,ts_ack= %u>\n",ts_ack);
|
||||
}
|
||||
@ -925,7 +931,7 @@ int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen) {
|
||||
send_raw_tcp_buf[i++] = 0x01;
|
||||
send_raw_tcp_buf[i++] = 0x03;
|
||||
send_raw_tcp_buf[i++] = 0x03;
|
||||
send_raw_tcp_buf[i++] = 0x05;
|
||||
send_raw_tcp_buf[i++] = wscale;
|
||||
} else {
|
||||
tcph->doff = 8;
|
||||
int i = sizeof(pseudo_header)+sizeof(tcphdr);
|
||||
@ -954,7 +960,7 @@ int send_raw_tcp(raw_info_t &raw_info,const char * payload, int payloadlen) {
|
||||
|
||||
tcph->urg = 0;
|
||||
//tcph->window = htons((uint16_t)(1024));
|
||||
tcph->window = htons((uint16_t) (10240 + random() % 100));
|
||||
tcph->window = htons((uint16_t) (receive_window_lower_bound + random() % receive_window_random_range));
|
||||
|
||||
tcph->check = 0; //leave checksum 0 now, filled later by pseudo header
|
||||
tcph->urg_ptr = 0;
|
||||
@ -1413,7 +1419,20 @@ int recv_raw_tcp(raw_info_t &raw_info,char * &payload,int &payloadlen)
|
||||
recv_info.dst_port=ntohs(tcph->dest);
|
||||
|
||||
recv_info.seq=ntohl(tcph->seq);
|
||||
|
||||
// recv_info.last_last_ack_seq=recv_info.last_ack_seq;
|
||||
//recv_info.last_ack_seq=recv_info.ack_seq;
|
||||
u32_t last_ack_seq=recv_info.ack_seq;
|
||||
recv_info.ack_seq=ntohl(tcph->ack_seq);
|
||||
if(recv_info.ack_seq==last_ack_seq)
|
||||
{
|
||||
recv_info.ack_seq_counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
recv_info.ack_seq_counter=0;
|
||||
}
|
||||
|
||||
recv_info.psh=tcph->psh;
|
||||
|
||||
if(tcph->rst==1)
|
||||
@ -1649,6 +1668,35 @@ int after_send_raw0(raw_info_t &raw_info)
|
||||
if (random() % 5 == 3)
|
||||
send_info.seq += raw_info.send_info.data_len; //////////////////modify
|
||||
}
|
||||
else if(seq_mode==3||seq_mode==4)
|
||||
{
|
||||
send_info.seq += raw_info.send_info.data_len;
|
||||
|
||||
u32_t window_size;
|
||||
|
||||
if(seq_mode==3)
|
||||
{
|
||||
window_size=(u32_t)((u32_t)receive_window_lower_bound<<(u32_t)wscale);
|
||||
}
|
||||
else//seq_mode==4
|
||||
{
|
||||
window_size=(u32_t)((u32_t)receive_window_lower_bound);
|
||||
}
|
||||
|
||||
if(larger_than_u32(send_info.seq+max_data_len,recv_info.ack_seq+window_size))
|
||||
{
|
||||
send_info.seq=raw_info.recv_info.ack_seq;
|
||||
}
|
||||
if(recv_info.ack_seq_counter>=3)
|
||||
{
|
||||
recv_info.ack_seq_counter=0;
|
||||
send_info.seq=raw_info.recv_info.ack_seq;
|
||||
}
|
||||
if(larger_than_u32(raw_info.recv_info.ack_seq,send_info.seq)) //for further use,currently not useful.
|
||||
{
|
||||
send_info.seq=raw_info.recv_info.ack_seq;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(raw_mode==mode_icmp)
|
||||
@ -1676,11 +1724,12 @@ int after_recv_raw0(raw_info_t &raw_info)
|
||||
if(larger_than_u32(recv_info.seq+raw_info.recv_info.data_len,send_info.ack_seq))
|
||||
send_info.ack_seq = recv_info.seq+raw_info.recv_info.data_len;//TODO only update if its larger
|
||||
}
|
||||
else if(seq_mode==3)
|
||||
else if(seq_mode==3||seq_mode==4)
|
||||
{
|
||||
if(recv_info.seq==send_info.ack_seq+1)
|
||||
if(recv_info.seq==send_info.ack_seq)
|
||||
{
|
||||
send_info.ack_seq=recv_info.seq+raw_info.recv_info.data_len;
|
||||
send_info.ack_seq=recv_info.seq+raw_info.recv_info.data_len;//currently we dont remembr tcp segments,this is the simplest way
|
||||
//TODO implement tcp segment remembering and SACK.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
extern int raw_recv_fd;
|
||||
extern int raw_send_fd;
|
||||
extern int seq_mode;
|
||||
extern int max_seq_mode;
|
||||
extern int filter_port;
|
||||
extern u32_t bind_address_uint32;
|
||||
extern int disable_bpf_filter;
|
||||
@ -54,6 +55,7 @@ struct packet_info_t //todo change this to union
|
||||
|
||||
u32_t seq,ack_seq;
|
||||
|
||||
u32_t ack_seq_counter;
|
||||
|
||||
u32_t ts,ts_ack;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user