mirror of
https://github.com/wangyu-/udp2raw.git
synced 2025-01-19 22:39:31 +08:00
added option source ip
This commit is contained in:
parent
39729da0ca
commit
ade4ef04d2
49
main.cpp
49
main.cpp
@ -59,6 +59,9 @@ int raw_mode=mode_udp;
|
|||||||
|
|
||||||
char local_address[100]="0.0.0.0", remote_address[100]="255.255.255.255",source_address[100]="0.0.0.0";
|
char local_address[100]="0.0.0.0", remote_address[100]="255.255.255.255",source_address[100]="0.0.0.0";
|
||||||
uint32_t local_address_uint32,remote_address_uint32,source_address_uint32;
|
uint32_t local_address_uint32,remote_address_uint32,source_address_uint32;
|
||||||
|
|
||||||
|
uint32_t source_port=0;
|
||||||
|
|
||||||
int local_port = -1, remote_port = -1;
|
int local_port = -1, remote_port = -1;
|
||||||
int epollfd ;
|
int epollfd ;
|
||||||
|
|
||||||
@ -756,6 +759,7 @@ void process_arg(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
/* These options set a flag. */
|
/* These options set a flag. */
|
||||||
{"source-ip", required_argument, 0, 1},
|
{"source-ip", required_argument, 0, 1},
|
||||||
|
{"source-port", required_argument, 0, 1},
|
||||||
};
|
};
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
printf("argc=%d ", argc);
|
printf("argc=%d ", argc);
|
||||||
@ -766,7 +770,7 @@ void process_arg(int argc, char *argv[])
|
|||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
printf(
|
printf(
|
||||||
"proc -l [adress:]port -r [adress:]port [-a passwd] [-b passwd]\n");
|
"proc -l [adress:]port -r [adress:]port -s/-c [--source-ip] [--source-port]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -818,13 +822,18 @@ void process_arg(int argc, char *argv[])
|
|||||||
case 'h':
|
case 'h':
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
//if (strchr(optarg, ':') != 0) {
|
if(strcmp(long_options[option_index].name,"source-ip")==0)
|
||||||
|
{
|
||||||
|
printf("parsing long option :source-ip\n");
|
||||||
sscanf(optarg, "%s", source_address);
|
sscanf(optarg, "%s", source_address);
|
||||||
printf("source: %s",source_address);
|
printf("source: %s\n",source_address);
|
||||||
//} else {
|
}
|
||||||
//printf("format --source-ip :adress");
|
else if(strcmp(long_options[option_index].name,"source-port")==0)
|
||||||
//exit(-1);
|
{
|
||||||
//}
|
printf("parsing long option :source-port\n");
|
||||||
|
sscanf(optarg, "%d", &source_port);
|
||||||
|
printf("source: %d\n",&source_port);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -930,7 +939,7 @@ int recv_raw_ip(packet_info_t &info,char * &payload,int &payloadlen)
|
|||||||
}
|
}
|
||||||
if(recv_len<link_level_header_len)
|
if(recv_len<link_level_header_len)
|
||||||
{
|
{
|
||||||
printf("length error");
|
printf("length error\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(link_level_header_len ==14&&(recv_raw_ip_buf[12]!=8||recv_raw_ip_buf[13]!=0))
|
if(link_level_header_len ==14&&(recv_raw_ip_buf[12]!=8||recv_raw_ip_buf[13]!=0))
|
||||||
@ -956,7 +965,7 @@ int recv_raw_ip(packet_info_t &info,char * &payload,int &payloadlen)
|
|||||||
|
|
||||||
|
|
||||||
if (!(iph->ihl > 0 && iph->ihl <=60)) {
|
if (!(iph->ihl > 0 && iph->ihl <=60)) {
|
||||||
if(debug_mode) printf("iph ihl error");
|
if(debug_mode) printf("iph ihl error\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1325,7 +1334,7 @@ int send_raw_tcp_deprecated(const packet_info_t &info,const char * payload,int p
|
|||||||
if(ret<0)
|
if(ret<0)
|
||||||
{
|
{
|
||||||
|
|
||||||
perror("raw send error");
|
perror("raw send error\n");
|
||||||
//printf("send error\n");
|
//printf("send error\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1392,7 +1401,7 @@ int recv_raw_udp(packet_info_t &info, char *&payload, int &payloadlen)
|
|||||||
|
|
||||||
if(recv_raw_ip(info,ip_payload,ip_payloadlen)!=0)
|
if(recv_raw_ip(info,ip_payload,ip_payloadlen)!=0)
|
||||||
{
|
{
|
||||||
printf("recv_raw_ip error");
|
printf("recv_raw_ip error\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(info.protocol!=IPPROTO_UDP)
|
if(info.protocol!=IPPROTO_UDP)
|
||||||
@ -2111,7 +2120,10 @@ int keep_connection_client() //for client
|
|||||||
{
|
{
|
||||||
anti_replay.re_init(); // this is not safe
|
anti_replay.re_init(); // this is not safe
|
||||||
|
|
||||||
g_packet_info_send.src_port = client_bind_to_a_new_port();
|
if(source_port==0)
|
||||||
|
{
|
||||||
|
g_packet_info_send.src_port = client_bind_to_a_new_port();
|
||||||
|
}
|
||||||
|
|
||||||
if(raw_mode==mode_icmp)
|
if(raw_mode==mode_icmp)
|
||||||
{
|
{
|
||||||
@ -2910,11 +2922,6 @@ int client_event_loop()
|
|||||||
printf("the trick to auto get source ip failed,you should specific an ip by --source-ip\n");
|
printf("the trick to auto get source ip failed,you should specific an ip by --source-ip\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
in_addr tmp;
|
in_addr tmp;
|
||||||
tmp.s_addr=source_address_uint32;
|
tmp.s_addr=source_address_uint32;
|
||||||
@ -2922,6 +2929,14 @@ int client_event_loop()
|
|||||||
//printf("done\n");
|
//printf("done\n");
|
||||||
|
|
||||||
|
|
||||||
|
if(try_to_list_and_bind(source_port)!=0)
|
||||||
|
{
|
||||||
|
printf("bind to source_port:%d fail\n ",source_port);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
g_packet_info_send.src_port=source_port;
|
||||||
|
|
||||||
|
|
||||||
g_packet_info_send.src_ip = source_address_uint32;
|
g_packet_info_send.src_ip = source_address_uint32;
|
||||||
|
|
||||||
int i, j, k;int ret;
|
int i, j, k;int ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user