2

鉴于

telnetd 的运行方式是为客户端分配一个 Telnet 伪终端设备,然后创建一个登录进程,该进程将 Telnet 伪终端的从端作为 stdin、stdout 和 stderr。telnetd 操作 Telnet 伪终端的 master 端,实现 TELNET 协议,在客户端和登录过程之间传递字符。

我试图在登录过程中获取远程主机的 IP 地址和端口号,一旦建立 telnet 连接并且用户通过身份验证。

在 getpeername 成功后的 telnetd main() 中,我添加了 REMOTE_HOST 和 REMOTE_PORT 的 setenv 并尝试在登录过程中访问这些变量。但我无法在 login.c 中访问这些环境变量。

我的问题太具体了,但是如果有人已经尝试在 telnetd 中添加一个 env var 并且能够在登录过程中访问,请建议我如何去做。谢谢

4

1 回答 1

1

问题终于解决了。在 telnetd 中,有许多调用会在其中重新设置环境。startslave 是创建哪个 tty 并分叉登录过程的功能。因此,在 startslave 中做了 getpeername(0, (struct sockaddr *)&from, &fromlen) 并在分叉登录过程之前添加了环境变量。现在 vars 可用。

于 2012-11-26T11:45:22.613 回答