netkit-telnet源码编译安装
介绍
Linux 下流行的 telnet 实现有两个:
-
GNU inetutils: http://ftp.gnu.org/gnu/inetutils/
-
哈佛netkit-telnet
编译
编译环境
Ubuntu 20.04.4 LTS
编译telnet-0.17
下载并解压安装包netkit-telnet_0.17.orig.tar.gz
编译源码
netkit-telnet-0.17# ./configure
netkit-telnet-0.17# make
遇到的问题
官方的代码编译还是会遇到一些代码本身的问题,需要做些修改。
undefined reference
commands.cc:(.text+0x25c4): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: commands.cc:(.text+0x2651): undefined reference to `operator new(unsigned long)'
/usr/bin/ld: commands.cc:(.text+0x26e1): undefined reference to `operator new(unsigned long)'
collect2: error: ld returned 1 exit status
原因:
申明了函数却没实现,一般是链接阶段出现
netkit-telnet-0.17# ./configure
Looking for a C++ compiler... gcc <<< 发现编译c++文件应该编译器要选g++
解决:修改configure文件中c++文件的编译器
# git diff
diff --git a/configure b/configure
index 429167a..e8780e7 100755
--- a/configure
+++ b/configure
@@ -122,7 +122,7 @@ EOF
if [ x"$CXX" = x ]; then
echo -n 'Looking for a C++ compiler... '
- for TRY in egcs gcc g++ CC c++ cc; do
+ for TRY in egcs g++ CC c++ cc; do <<<修改
exit函数不存在
main.cc:92:2: error: 'exit' was not declared in this scope; did you mean 'Exit'?
92 | exit(1);
| ^~~~
| Exit
make[1]: *** [../MRULES:7: main.o] Error 1
make[1]: Leaving directory 'netkit-telnet-0.17/telnet'
make: *** [Makefile:8: telnet.build] Error 2
解决:
添加头文件
#include <cstdlib>
error: 'memcpy' was not declared
terminal.cc:696:5: error: 'memcpy' was not declared in this scope
696 | memcpy(new_tc.c_cc, old_tc.c_cc, sizeof(old_tc.c_cc));
解决:
c++ - ‘memcpy’ was not declared in this scope - Stack Overflow
运行
编译完成后生成可执行文件
//客户端
netkit-telnet-0.17/telnet/telnet
//服务端
netkit-telnet-0.17/telnetd/telnetd
运行client端
netkit-telnet-0.17/telnet# ./telnet
telnet> ?
Commands may be abbreviated. Commands are:
close close current connection
logout forcibly logout remote user and close the connection
display display operating parameters
mode try to enter line or character mode ('mode ?' for more)
open connect to a site
quit exit telnet
send transmit special characters ('send ?' for more)
set set operating parameters ('set ?' for more)
unset unset operating parameters ('unset ?' for more)
status print status information
toggle toggle operating parameters ('toggle ?' for more)
slc set treatment of special characters
z suspend telnet
environ change environment variables ('environ ?' for more)
运行server端
netkit-telnet-0.17/telnetd# ./telnetd -n
Usage: telnetd [-debug] [-D (options|report|exercise|netdata|ptydata)]
[-h] [-L login_program] [-n] [port]