如何利用Telnet连接linux服务器工具

服务器源代码如下:#include &stdarg.h&#include &errno.h&#include &stdio.h&#include &fcntl.h&#include &unistd.h&#include &string.h&#include &time.h&#include &sys/types.h&#include &sys/stat.h&#include &dirent.h&#include &errno.h&#include &netinet/in.h&#include &sys/socket.h&#include &resolv.h&#include &arpa/inet.h&#include &stdlib.h&#include &signal.h&#include &getopt.h&#define DEFAULTIP &127.0.0.1&#define DEFAULTPORT &23&#define DEFAULTBACK &10&#define DEFAULTDIR &/tmp&#define DEFAULTLOG &/tmp/telnet-server.log&void prterrmsg(char *msg);#define prterrmsg(msg)        { perror(msg); abort(); }void wrterrmsg(char *msg);#define wrterrmsg(msg)        { fputs(msg, logfp); fputs(strerror(errno), logfp);fflush(logfp); abort(); }void prtinfomsg(char *msg);#define prtinfomsg(msg)        { fputs(msg, stdout);  }void wrtinfomsg(char *msg);#define wrtinfomsg(msg)        {  fputs(msg, logfp); fflush(logfp);}#define MAXBUF        1024char buffer[MAXBUF + 1];char *host = 0;char *port = 0;char *back = 0;char *dirroot = 0;char *logdir = 0;unsigned char daemon_y_n = 0;FILE *#define MAXPATH        150/*------------------------------------------------------ *--- AllocateMemory - 分配空间并把d所指的内容复制 *------------------------------------------------------ */void AllocateMemory(char **s, int l, char *d){    *s = malloc(l + 1);    bzero(*s, l + 1);    memcpy(*s, d, l);}/************关于本文档**************************************************************filename: telnet-server.c*purpose: 这是在Linux下用C语言写的telnet服务器,没有用户名和密码,直接以开启服务者的身份登录系统*wrote by: zhoulifa() 周立发()Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言*date time: 17:02*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途* 但请遵循GPL*Thanks to: *Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!**********************************************************************************//*------------------------------------------------------ *--- getoption - 分析取出程序的参数 *------------------------------------------------------ */void getoption(int argc, char **argv){    int c,    char *p = 0;    opterr = 0;    while (1) {        int option_index = 0;        static struct option long_options[] = {            {&host&, 1, 0, 0},            {&port&, 1, 0, 0},            {&back&, 1, 0, 0},            {&dir&, 1, 0, 0},            {&log&, 1, 0, 0},            {&daemon&, 0, 0, 0},            {0, 0, 0, 0}        };        /* 本程序支持如一些参数:         * --host IP地址 或者 -H IP地址         * --port 端口 或者 -P 端口         * --back 监听数量 或者 -B 监听数量         * --dir 服务默认目录 或者 -D 服务默认目录         * --log 日志存放路径 或者 -L 日志存放路径         * --daemon 使程序进入后台运行模式         */        c = getopt_long(argc, argv, &H:P:B:D:L&,                        long_options, &option_index);        if (c == -1 || c == '?')                   if(optarg)        len = strlen(optarg);        else        len = 0;        if ((!c && !(strcasecmp(long_options[option_index].name, &host&)))            || c == 'H')            p = host = malloc(len + 1);        else if ((!c                  &&                  !(strcasecmp(long_options[option_index].name, &port&)))                 || c == 'P')            p = port = malloc(len + 1);        else if ((!c                  &&                  !(strcasecmp(long_options[option_index].name, &back&)))                 || c == 'B')            p = back = malloc(len + 1);        else if ((!c                  && !(strcasecmp(long_options[option_index].name, &dir&)))                 || c == 'D')            p = dirroot = malloc(len + 1);        else if ((!c                  && !(strcasecmp(long_options[option_index].name, &log&)))                 || c == 'L')            p = logdir = malloc(len + 1);        else if ((!c                  &&                  !(strcasecmp                    (long_options[option_index].name, &daemon&)))) {            daemon_y_n = 1;                   }        else                   bzero(p, len + 1);        memcpy(p, optarg, len);    }}int main(int argc, char **argv){    struct sockaddr_    int sock_fd,    /* 获得程序工作的参数,如 IP 、端口、监听数、网页根目录、目录存放位置等 */    getoption(argc, argv);    if (!host) {        addrlen = strlen(DEFAULTIP);        AllocateMemory(&host, addrlen, DEFAULTIP);    }    if (!port) {        addrlen = strlen(DEFAULTPORT);        AllocateMemory(&port, addrlen, DEFAULTPORT);    }    if (!back) {        addrlen = strlen(DEFAULTBACK);        AllocateMemory(&back, addrlen, DEFAULTBACK);    }    if (!dirroot) {        addrlen = strlen(DEFAULTDIR);        AllocateMemory(&dirroot, addrlen, DEFAULTDIR);    }    if (!logdir) {        addrlen = strlen(DEFAULTLOG);        AllocateMemory(&logdir, addrlen, DEFAULTLOG);    }    printf        (&host=%s port=%s back=%s dirroot=%s logdir=%s %s是后台工作模式(进程ID:%d)\n&,         host, port, back, dirroot, logdir, daemon_y_n?&&:&不&, getpid());    /* fork() 两次处于后台工作模式下 */    if (daemon_y_n) {        if (fork())            exit(0);        if (fork())            exit(0);        close(0), close(1), close(2);        logfp = fopen(logdir, &a+&);        if (!logfp)            exit(0);    }    /* 处理子进程退出以免产生僵尸进程 */    signal(SIGCHLD, SIG_IGN);    /* 创建 socket */    if ((sock_fd = socket(PF_INET, SOCK_STREAM, 0)) & 0) {        if (!daemon_y_n) {            prterrmsg(&socket()&);        } else {            wrterrmsg(&socket()&);        }    }    /* 设置端口快速重用 */    addrlen = 1;    setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &addrlen,               sizeof(addrlen));    addr.sin_family = AF_INET;    addr.sin_port = htons(atoi(port));    addr.sin_addr.s_addr = inet_addr(host);    addrlen = sizeof(struct sockaddr_in);    /* 绑定地址、端口等信息 */    if (bind(sock_fd, (struct sockaddr *) &addr, addrlen) & 0) {        if (!daemon_y_n) {            prterrmsg(&bind()&);        } else {            wrterrmsg(&bind()&);        }    }    /* 开启临听 */    if (listen(sock_fd, atoi(back)) & 0) {        if (!daemon_y_n) {            prterrmsg(&listen()&);        } else {            wrterrmsg(&listen()&);        }    }    while (1) {        int new_        addrlen = sizeof(struct sockaddr_in);        /* 接受新连接请求 */        new_fd = accept(sock_fd, (struct sockaddr *) &addr, &addrlen);        if (new_fd & 0) {            if (!daemon_y_n) {                prterrmsg(&accept()&);            } else {                wrterrmsg(&accept()&);            }                   }        bzero(buffer, MAXBUF + 1);        sprintf(buffer, &连接来自于: %s:%d\n&,                inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));        if (!daemon_y_n) {            prtinfomsg(buffer);        } else {            wrtinfomsg(buffer);        }        /* 产生一个子进程去处理请求,当前进程继续等待新的连接到来 */        if (!fork()) {            /* 把socket连接作为标准输入、输出、出错句柄来用 */            dup2(new_fd, 0);            dup2(new_fd, 1);            dup2(new_fd, 2);            /* 切换到指定目录工作 */            chdir(dirroot);            /* 交互式执行shell */            execl(&/bin/bash&, &-l&, &--login&, &-i&, &-r&, &-s&, (char *)NULL);        }        close(new_fd);    }    close(sock_fd);    return 0;}用下列命令编译程序:gcc -Wall telnet-server -o telnetd启动telnet服务:./telnetd --daemon
#以root用户身份在23端口(即telnet默认端口服务)或./telnetd -P 7838 #以非root用户身份
然后开启一个新终端,telnet连接自己的服务器试试,如:telnet 127.0.0.1或telnet 127.0.0.1 7838不需要输入用户名和密码,直接以启动telnet服务的用户的身份登录系统了。输入系统命令体验一下吧!
想生一个这样的女儿,看到她笑,仿佛全世界都天晴了。想生一个这样的女儿,陪她看书,陪她成长,告诉她女孩的内涵比外表更重要。
作为女生,你是否大胆的展示自己的魅力?自信的挥洒自己的性感?女人当如此,不论遭遇什么困境,婚与否亦不重要,都别忘了爱自己。
鼻涕虫黄琳
中国热点博客
请注意使用文明用语
画报点击数0
文章点击数0RHEL6之telnet服务的安装与配置_服务器应用_Linux公社-Linux系统门户网站
你好,游客
RHEL6之telnet服务的安装与配置
来源:Linux社区&
作者:liuhaiping123
1. 查看linux内核相关信息&[root@server8 ~]# uname -a&Linux
2.6.32-71.el6.i686 #1 SMP Wed Sep 1 01:26:34 EDT
i686 i386 GNU/Linux& & 主机名& 内核版本& CPU平台 编译时间& & 支持的CPU架构 操作系统&查看linux的内核版本:&[root@server8 ~]# uname -r&2.6.32-71.el6.i686& & 主版本.次版本.修正版本-编译次数.描述信息.平台架构
相关阅读:RHEL Server 5.5 telnet安装和配置
2. rhel6 telnet-server的安装与配置
&相关包介绍: telnet-server 是telnet的主服务包& telnet是登录服务器的客户端连接连接工具,可以安装两个包&[root@server8 ~]# yum install telnet-server telnet& 使用yum的方式安装&telnet服务的配置: telnet是一个基于xinetd的服务,即是一个超级服务管理的服务,所以其对应的配置文件在/etc/xinetd.d/目录下&service telnet& & & &{& flags& & & & & = REUSE& socket_type& & = stream& 使用的是TCP连接,如果是UDP则为dgram& wait& & & & & & = no& user& & & & & & = root& 运行者的身份& server& & & & & = /usr/sbin/in.telnetd 执行侦听的进程为in.telnetd,TCP_Wrapper根据该程序名处理& log_on_failure& += USERID& disable& & & & = yes& 是否关闭,yes则为关闭,设置为no则开启telnet&}&启动telnet:
& & 1. 修改/etc/xined.d/telnet配置文件中disable=no则会启动telnet服务& & 2. 使用chkconfig telnet on命令开启telnet,实现的功能和配置文件一致&注意: 不论是通过修改配置文件还是通过chkconfig命令启动telnet,都必须要重启加载xinetd服务,因为telnet是xinetd所管理的一个子服务! service xinetd restart& & 3. 客户端连接测试&telnet remote_ip 使用telnet客户端去连接远程服务器,默认时不允许root用户登录,被系统中的PAM模块拒绝&[root@server8 ~]# netstat -antupl | grep :23& & & telnet默认侦听在TCP的23号端口&tcp& & & & 0& & & 0 :::23& & & & & & & & & & & :::*& & & & & & & & & & & & LISTEN& & & 3899/xinetd&
&[root@server8 ~]# telnet 172.16.1.108&Trying 172.16.1.108...&Connected to 172.16.1.108.&Escape character is '^]'.& Enterprise Linux Server release 6.0 (Santiago)&Kernel 2.6.32-71.el6.i686 on an i686&login: &Password: &[redhat@server8 ~]$ whoami& 普通用户redhat成功登录,超级用户root则无法登录&redhat& & 4. telnet的相关配置& & & & 1. 限制访问的IP地址和网段& & & & & only_from = 172.16.1.0/24 允许访问的IP段&& & & & 2. 拒绝访问的IP地址和网段& & & & & no_access = 172.16.1.1&& & & & 3. 限制访问telnet的时间段& & & & & access_times = 12:00-13:00&& & & & 4. 限制登录的个数& & & & & instances = 2
& & & & 5. 指定侦听的IP地址& & & & & interface = 172.16.1.108&&总结: telnet服务的相关配置可以参考man 5 xinetd.conf的man帮助文档,因为其是一个基于xinetd的服务,默认可以从/etc/xinetd.conf配置文件中继承而来!5. telnet的安全设置之&&TCP_Wrapper 这是一种安全机制,工作在网络层,能够针对IP地址、网段进行过滤,类似于路由器防火墙上的acl&&访问控制的功能&& & 1. 设置允许访问的IP地址或IP网段& & [root@server8 ~]# tail -n 1 /etc/hosts.allow& & & & in.telnetd:& & 172.16.1.0/24:& allow& && & 2. 设置拒绝访问的IP地址或网段& & [root@server8 ~]# tail -n 1 /etc/hosts.deny & & in.telnetd:& & 172.16.1.108:& deny& & 总结: telnet是一种基于xinetd的服务,凡是基于xinetd的服务都支持TCP_Wrapper机制,即是通过/etc/hosts.allow和/etc/hosts.deny两个文件进行访问控制,这两个文件的&执行顺序是:如果/etc/hosts.allow文件中有条目匹配则放行,如果没有条目则查询/etc/hosts.deny文件,如果匹配则拒绝,如果都不匹配则全部放行!&通常,将允许的IP地址设置在/etc/hosts.allow文件内,拒绝的IP地址设置在/etc/hosts.deny文件内,当然两个文件都可以同时存在,或者只设置一个文件,允许也可以写拒绝条目!
相关资讯 & & &
& (02/25/:50)
& (01/16/:16)
& (04/13/:32)
& (02/05/:10)
& (10/15/:33)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款you have been blockedWindows10连接linux服务器
平时我们通过windows连接服务器时,大多数用的是ssh客户端软件,推荐使用ssh,安全系数比较高。下面介绍用telnet连接服务器。
C:\Users\dell&systeminfo主机名: BOHAO
OS 名称: Microsoft Windows 10 家庭中文版
OS 版本: 10.0.10240
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站OS 构件类型: Multiprocessor Free
注册的所有人: dell
首先是通过windows连接linux服务器,所以安装telnet客户端服务,windows上安装起来很方便:
windows键+X -&&&程序和功能 &&-&启用或者关闭Windows功能&&&&选择Telnet客户端
然后自动安装了Telnet客户端服务:Windows键盘+R ---&cmd----&telnet
欢迎使用 Microsoft Telnet Client
Escape 字符为 'CTRL+]'
Microsoft Telnet&
此时客户端已经安装好了。
服务器端:
[root@localhost ~]# cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel \r on an \m
检查是否安装xinetd:
[root@localhost ~]# rpm -qa | grep xinetd
xinetd-2.3.14-10.el5
已经安装了。 检查是否安装Telnet:
[root@localhost ~]# rpm -qa | grep telnet
telnet-0.17-39.el5
此时系统只默认安装了Telnet客户端,我们需要手动安装Telnet服务器端
通过yum来安装比较简单,因为之前已经了Telnet service包:
[root@localhost 共享文件]# rpm -ivh telnet-server-0.17-35.2.1.i386.rpm
warning: telnet-server-0.17-35.2.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Preparing... ########################################### [100%]
1:telnet-server ########################################### [100%]
安装完成。
修改telnet配置文件:
vi /etc/xinetd.d/telnet
把disable的值改成no
修改iptables:
在/etc/sysconfig/iptables在该文件中添加一行:-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
重启xinetd服务:
[root@localhost ~]# service xinetd restart
停止 xinetd: [确定]
启动 xinetd: [确定]
启动Telnet服务: [root@localhost ~]# chkconfig telnet on
获得服务器IP:
[oracle@localhost tmp]$ /sbin/ifconfig | grep 192
inet addr:192.168.1.108 Bcast:192.168.1.255 Mask:255.255.255.0
客户端通过Telnet连接服务器:
Enterprise
Enterprise Linux Server release 5.5 (Carthage)
Kernel 2.6.18-194.el5 on an i686
login: oracle
Last login: Mon Aug 17 17:32:10 from localhost
-bash: /home/oracle/.bash_profile: line 24: syntax error: unexpected end of file-bash-3.2$ bash
[oracle@localhost ~]$ w
18:10:58 up 3:31, 5 users, load average: 0.10, 0.08, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
oracle :0 - 14:42 ?xdm? 1:10 0.08s /usr/bin/gnome-
oracle pts/1 :0.0 17:23 3:11 0.02s 0.02s bash
oracle pts/2 :0.0 16:37 53:33 0.07s 10.96s gnome-terminal
oracle pts/3 :0.0 17:56 14:15 0.00s 0.00s bash
oracle pts/4 localhost 18:10 0.00s 0.00s 0.00s w
以上已成功连接。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 远程连接linux服务器 的文章

 

随机推荐