restrict listening IP address

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2399 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.8
Stéphane Fillod, F8CFE 2008-09-21 20:32:08 +00:00
rodzic 45cbd3b019
commit f7e6d60341
4 zmienionych plików z 43 dodań i 7 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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"

Wyświetl plik

@ -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

Wyświetl plik

@ -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"