|
@@ -489,6 +489,7 @@ static int handle_random_icmp(unsigned char *packet,
|
|
|
int main(int argc, char **argv) {
|
|
int main(int argc, char **argv) {
|
|
|
int i;
|
|
int i;
|
|
|
char *ptr;
|
|
char *ptr;
|
|
|
|
|
+ char *bind_address = NULL;
|
|
|
long int arg;
|
|
long int arg;
|
|
|
int icmp_sockerrno, udp_sockerrno, tcp_sockerrno;
|
|
int icmp_sockerrno, udp_sockerrno, tcp_sockerrno;
|
|
|
int result;
|
|
int result;
|
|
@@ -654,7 +655,7 @@ int main(int argc, char **argv) {
|
|
|
|
|
|
|
|
case 's':
|
|
case 's':
|
|
|
/* specify source IP address */
|
|
/* specify source IP address */
|
|
|
- set_source_ip(optarg);
|
|
|
|
|
|
|
+ bind_address = optarg;
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
case 'V':
|
|
case 'V':
|
|
@@ -711,6 +712,10 @@ int main(int argc, char **argv) {
|
|
|
icmp_sockerrno = errno;
|
|
icmp_sockerrno = errno;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (bind_address != NULL) {
|
|
|
|
|
+ set_source_ip(bind_address);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/* now drop privileges (no effect if not setsuid or geteuid() == 0) */
|
|
/* now drop privileges (no effect if not setsuid or geteuid() == 0) */
|
|
|
setuid(getuid());
|
|
setuid(getuid());
|
|
|
|
|
|