restrict listening IP address

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2399 7ae35d74-ebe9-4afe-98af-79ac388436b8
This commit is contained in:
Stéphane Fillod, F8CFE 2008-09-21 20:32:08 +00:00
parent 45cbd3b019
commit f7e6d60341
4 changed files with 43 additions and 7 deletions

View File

@ -97,6 +97,9 @@ Use -L option for a list.
.B \-t, --port=number
Use \fInumber\fP as the TCP listening port. The default is 4532.
.TP
.B \-T, --listen-addr=IPADDR
Use \fIIPADDR\fP as the listening IP address. The default is ANY.
.TP
.B \-l, --list
List all model numbers defined in \fBHamlib\fP and exit.
.TP

View File

@ -4,7 +4,7 @@
* This program test/control a radio using Hamlib.
* It takes commands from network connection.
*
* $Id: rigctld.c,v 1.7 2008-09-17 20:36:34 fillods Exp $
* $Id: rigctld.c,v 1.8 2008-09-21 20:32:07 fillods Exp $
*
*
* This program is free software; you can redistribute it and/or
@ -68,7 +68,7 @@
* NB: do NOT use -W since it's reserved by POSIX.
* TODO: add an option to read from a file
*/
#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:lC:t:LuovhV"
#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:lC:t:T:LuovhV"
static struct option long_options[] =
{
{"model", 1, 0, 'm'},
@ -80,6 +80,7 @@ static struct option long_options[] =
{"serial-speed", 1, 0, 's'},
{"civaddr", 1, 0, 'c'},
{"port", 1, 0, 't'},
{"listen-addr", 1, 0, 'T'},
{"list", 0, 0, 'l'},
{"set-conf", 1, 0, 'C'},
{"show-conf",0, 0, 'L'},
@ -105,6 +106,7 @@ int interactive = 1; /* no cmd because of daemon */
int prompt= 0 ; /* Daemon mode for rigparse return string */
int portno = 4532;
uint32_t src_addr = INADDR_ANY;
#define MAXCONFLEN 128
@ -129,6 +131,7 @@ int main (int argc, char *argv[])
int sock_listen;
struct sockaddr_in serv_addr;
int reuseaddr = 1;
int a0,a1,a2,a3;
while(1) {
int c;
@ -242,6 +245,17 @@ int main (int argc, char *argv[])
}
portno = atoi(optarg);
break;
case 'T':
if (!optarg) {
usage(); /* wrong arg count */
exit(1);
}
if (4 != sscanf(optarg, "%d.%d.%d.%d", &a0,&a1,&a2,&a3)) {
usage(); /* wrong arg count */
exit(1);
}
src_addr = (a0<<24)|(a1<<16)|(a2<<8)|a3;
break;
case 'o':
vfo_mode++;
break;
@ -343,7 +357,7 @@ int main (int argc, char *argv[])
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_addr.s_addr = htonl(src_addr);
if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR,
@ -482,6 +496,7 @@ void usage(void)
" -s, --serial-speed=BAUD set serial speed of the serial port\n"
" -c, --civaddr=ID set CI-V address, decimal (for Icom rigs only)\n"
" -t, --port=NUM set TCP listening port, default %d\n"
" -T, --listen-addr=IPADDR set listening IP address, default ANY\n"
" -C, --set-conf=PARM=VAL set config parameters\n"
" -L, --show-conf list all config parameters\n"
" -l, --list list all model numbers and exit\n"

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH ROTCTLD "8" "Septembre 12, 2008" "Hamlib" "Rotator Control Daemon"
.TH ROTCTLD "8" "Septembre 21, 2008" "Hamlib" "Rotator Control Daemon"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -74,6 +74,9 @@ Use -L option for a list.
.B \-t, --port=number
Use \fInumber\fP as the TCP listening port. The default is 4533.
.TP
.B \-T, --listen-addr=IPADDR
Use \fIIPADDR\fP as the listening IP address. The default is ANY.
.TP
.B \-l, --list
List all model numbers defined in \fBHamlib\fP and exit.
.TP

View File

@ -4,7 +4,7 @@
* This program test/control a rotator using Hamlib.
* It takes commands from network connection.
*
* $Id: rotctld.c,v 1.3 2008-09-17 20:36:34 fillods Exp $
* $Id: rotctld.c,v 1.4 2008-09-21 20:32:08 fillods Exp $
*
*
* This program is free software; you can redistribute it and/or
@ -76,13 +76,14 @@ void usage();
* NB: do NOT use -W since it's reserved by POSIX.
* TODO: add an option to read from a file
*/
#define SHORT_OPTIONS "m:r:s:C:t:LvhVl"
#define SHORT_OPTIONS "m:r:s:C:t:T:LvhVl"
static struct option long_options[] =
{
{"model", 1, 0, 'm'},
{"rot-file", 1, 0, 'r'},
{"serial-speed", 1, 0, 's'},
{"port", 1, 0, 't'},
{"listen-addr", 1, 0, 'T'},
{"list", 0, 0, 'l'},
{"set-conf", 1, 0, 'C'},
{"show-conf",0, 0, 'L'},
@ -96,6 +97,7 @@ int interactive = 1; /* no cmd because of daemon */
int prompt= 0 ; /* Daemon mode for rigparse return string */
int portno = 4533;
uint32_t src_addr = INADDR_ANY;
#define MAXCONFLEN 128
@ -116,6 +118,7 @@ int main (int argc, char *argv[])
int sock_listen;
struct sockaddr_in serv_addr;
int reuseaddr = 1;
int a0,a1,a2,a3;
while(1) {
int c;
@ -170,6 +173,17 @@ int main (int argc, char *argv[])
}
portno = atoi(optarg);
break;
case 'T':
if (!optarg) {
usage(); /* wrong arg count */
exit(1);
}
if (4 != sscanf(optarg, "%d.%d.%d.%d", &a0,&a1,&a2,&a3)) {
usage(); /* wrong arg count */
exit(1);
}
src_addr = (a0<<24)|(a1<<16)|(a2<<8)|a3;
break;
case 'v':
verbose++;
break;
@ -243,7 +257,7 @@ int main (int argc, char *argv[])
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_addr.s_addr = htonl(src_addr);
if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR,
@ -376,6 +390,7 @@ void usage()
" -r, --rot-file=DEVICE set device of the rotator to operate on\n"
" -s, --serial-speed=BAUD set serial speed of the serial port\n"
" -t, --port=NUM set TCP listening port, default %d\n"
" -T, --listen-addr=IPADDR set listening IP address, default ANY\n"
" -C, --set-conf=PARM=VAL set config parameters\n"
" -L, --show-conf list all config parameters\n"
" -l, --list list all model numbers and exit\n"