2. 服务器端

假设服务器是一个 Linux 系统,具有以下任一配置:

我能想到的最简单的设置是使用一个五行 Perl 脚本在/usr/sbin/modemd:

   
#!/usr/bin/perl
select((select(STDOUT), $| = 1)[$[]);
select((select(STDIN), $| = 1)[$[]);
exec 'cu -s 115200 -l /dev/ttyS1';
die '$0: Cant exec cu: $!\n';

中实现一个调制解调器守护进程。如果客户端连接到如下所述的相应端口,调制解调器守护进程将由 inetd 进程启动。modemd 只是将套接字句柄与 cu 命令的 STDIN 和 STDOUT 连接,并让 cu 处理实际的调制解调器设备。

必须通过更新其配置文件(通常是/etc/inetd.conf)来使 inetd 进程知道调制解调器守护进程的存在。

#
# modem daemon
#
modem stream tcp nowait root /usr/sbin/tcpd /usr/sbin/modemd /dev/ttyS1

为了使其工作,需要向/etc/services添加一个条目,例如

   
modem           2006/tcp        modemd

这会将符号名称与显式端口关联,在本例中为 2006。端口号可以是任何尚未分配给现有服务的数字。完成这些更改后,必须向 inetd 进程发送信号,以便 inetd 重新读取并处理其配置文件。

   
bash# ps | grep inetd
194  ?  S     0:00 /usr/sbin/inetd

bash# kill -HUP 194

现在服务器端已准备好接受来自客户端的请求。可以通过以下方式验证其功能是否正确:

bash$ telnet localhost modem

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

您现在已连接到调制解调器。您现在可以发出 AT 命令以验证设置

   
atz
atz
OK

ati1
ati1
Linux ISDN
OK

^]
telnet>quit
bash$

除了使用 Perl 脚本作为调制解调器服务器之外,还有一个名为 Masqdialer 的程序,可从 http://w3.cpwright.com/mserver/ 获取。

使用 Masqdialer,您可以将连接到服务器的任意数量的调制解调器导出到任何可以通过 TCP/IP 在给定端口上使用二进制数据流连接到服务器的主机。

2.1. Masqdialer 安装

在编译之前,请检查 config.h 以获取编译时选项

执行 make all

复制二进制文件(mservertcpconn)到合适的目录中,例如 /usr/local/sbin/。复制mserver.conf到您在config.h.

中指定的路径。Masqdialer 可以从您的系统启动脚本之一启动。一个简单的 /usr/local/sbin/mserver 将以守护进程方式运行它。

2.2. Masqdialer 配置

中的一行mserver.conf可能如下所示

5800 /dev/ttyS1      115200,8,N,1    *.foo.org,192.168.2.1

这意味着连接到/dev/ttyS1的调制解调器可以通过端口 5800 从域 foo.org 中的任何位置以及从主机 192.168.2.1 连接。任何其他主机都将被拒绝。陷阱:如果您不指定主机,则任何主机都将被允许连接。串行线路设置是固定的,无法从客户端更改。您可以在单个端口上导出多个调制解调器。Masqdialer 仅在使用 UUCP 样式锁定文件实际使用调制解调器设备时才锁定它们,从而允许其他程序利用它们。