亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? telnet.c.txt

?? 一個小的telnet程序與大家共享
?? TXT
字號:
Linux網絡編程一步一步學-用C編寫一個telnet服務器
#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        1024

char 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 *logfp;

#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(zhoulifa@163.com) 周立發(http://zhoulifa.bokee.com)
Linux愛好者 Linux知識傳播者 SOHO族 開發者 最擅長C語言
*date time:2007-01-27 17:02
*Note: 任何人可以任意復制代碼并運用這些文檔,當然包括你的商業用途
* 但請遵循GPL
*Thanks to: Google.com
*Hope:希望越來越多的人貢獻自己的力量,為科學技術發展出力
* 科技站在巨人的肩膀上進步更快!感謝有開源前輩的貢獻!
**********************************************************************************/

/*------------------------------------------------------
 *--- getoption - 分析取出程序的參數
 *------------------------------------------------------
 */
void getoption(int argc, char **argv)
{
    int c, len;
    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 == '?')
            break;

        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;
            continue;
        }
        else
            break;
        bzero(p, len + 1);
        memcpy(p, optarg, len);
    }
}

int main(int argc, char **argv)
{
    struct sockaddr_in addr;
    int sock_fd, addrlen;

    /* 獲得程序工作的參數,如 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_fd;
        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()");
            }
            break;
        }
        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服務的用戶的身份登錄系統了。
輸入系統命令體驗一下吧!

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久国产精品韩国三级视频| 性做久久久久久免费观看| 99r国产精品| 亚洲国产欧美在线人成| 7777精品伊人久久久大香线蕉的| 另类调教123区| 中文字幕在线观看不卡| 欧美日韩在线播放三区四区| 激情丁香综合五月| 亚洲欧美在线高清| 欧美一区二区黄色| 卡一卡二国产精品 | 日韩一区二区三区高清免费看看| 麻豆精品在线播放| 亚洲桃色在线一区| 日韩美一区二区三区| 99精品久久久久久| 免费成人在线影院| 亚洲色图一区二区| 日韩视频在线观看一区二区| 不卡在线观看av| 麻豆国产精品官网| 国产日韩成人精品| 欧美一区二区三区在线视频| 91免费视频网址| 精品亚洲porn| 香蕉久久夜色精品国产使用方法 | 91玉足脚交白嫩脚丫在线播放| 麻豆成人综合网| 午夜私人影院久久久久| 亚洲综合久久久| 有坂深雪av一区二区精品| 国产拍欧美日韩视频二区| 26uuu国产日韩综合| 日韩一二三区不卡| 日韩视频免费观看高清完整版在线观看 | 亚洲综合在线五月| 亚洲人成在线播放网站岛国| 国产精品毛片久久久久久| 国产午夜亚洲精品理论片色戒 | 91丨porny丨首页| 99精品久久只有精品| 不卡的av电影在线观看| 成人免费毛片嘿嘿连载视频| 丁香婷婷综合色啪| 高清不卡在线观看| 成人av影视在线观看| jlzzjlzz亚洲日本少妇| 99久精品国产| 一本久久a久久免费精品不卡| 99国产精品久| 色狠狠色狠狠综合| 欧美男生操女生| 欧美一级电影网站| 久久久久国产精品厨房| 中文字幕欧美日本乱码一线二线| 国产精品久久久久一区二区三区 | 亚洲欧洲制服丝袜| 一区二区三区在线视频观看| 亚洲色图一区二区三区| 一区二区成人在线| 日韩成人伦理电影在线观看| 蜜桃精品在线观看| 国产夫妻精品视频| k8久久久一区二区三区| 色综合久久综合| 91.成人天堂一区| 26uuu久久天堂性欧美| 国产精品一区二区在线播放| 国产·精品毛片| 色国产精品一区在线观看| 欧美日韩一级大片网址| 欧美mv和日韩mv国产网站| 国产欧美日韩视频一区二区| 国产精品成人一区二区艾草 | 国产一区二区在线观看免费| 成人精品在线视频观看| 在线观看网站黄不卡| 欧美一区二区精美| 国产精品电影院| 日韩精品久久理论片| 国产精品综合二区| 欧美三日本三级三级在线播放| 日韩欧美123| ...xxx性欧美| 免费人成黄页网站在线一区二区 | 色拍拍在线精品视频8848| 欧美一区日韩一区| 亚洲国产精品ⅴa在线观看| 亚洲已满18点击进入久久| 国内外成人在线| 色偷偷久久一区二区三区| 日韩欧美二区三区| 亚洲卡通动漫在线| 韩日欧美一区二区三区| 在线观看区一区二| 国产欧美精品一区| 日韩有码一区二区三区| 99久久精品国产一区二区三区 | 欧美日韩免费一区二区三区| 国产日韩欧美精品一区| 日本免费新一区视频| 91欧美一区二区| 久久网站最新地址| 亚洲国产精品久久人人爱蜜臀 | 国产一区二区三区四区五区入口| 色老汉一区二区三区| 久久久夜色精品亚洲| 视频一区国产视频| 色综合激情五月| 中文字幕欧美三区| 另类小说欧美激情| 欧美美女直播网站| 一二三区精品福利视频| 成人毛片在线观看| 欧美xxxxx裸体时装秀| 亚洲成人手机在线| 91网页版在线| 中文字幕一区二| 粉嫩av一区二区三区在线播放| 日韩免费成人网| 欧美aⅴ一区二区三区视频| 欧美午夜精品久久久| 亚洲欧美视频一区| 波多野结衣中文一区| 国产欧美一区二区在线观看| 久久av资源网| 精品三级av在线| 麻豆精品一二三| 欧美电视剧免费全集观看| 日本最新不卡在线| 欧美一区二区三区婷婷月色 | 男人的j进女人的j一区| 欧美精品777| 五月天网站亚洲| 在线电影院国产精品| 亚洲午夜一区二区| 欧美在线999| 亚洲成人在线观看视频| 欧美日韩高清一区二区三区| 亚洲国产成人porn| 在线观看91精品国产麻豆| 午夜电影久久久| 日韩亚洲电影在线| 精一区二区三区| 国产欧美日韩在线| eeuss国产一区二区三区| 国产精品国产a| 色伊人久久综合中文字幕| 亚洲天堂免费在线观看视频| 一本大道久久a久久精二百 | 亚洲免费观看在线视频| 91视频xxxx| 午夜影院在线观看欧美| 91精品国产综合久久精品app | 欧美性淫爽ww久久久久无| 亚洲高清一区二区三区| 欧美一级国产精品| 狠狠色伊人亚洲综合成人| 久久久www成人免费毛片麻豆 | 欧美精品黑人性xxxx| 久久精品免费看| 国产欧美va欧美不卡在线| 91视频免费观看| 日韩精品一区第一页| 久久久久久久性| 91玉足脚交白嫩脚丫在线播放| 性久久久久久久久| 久久嫩草精品久久久久| 国产成人精品aa毛片| 亚洲人成网站色在线观看| 欧美日韩成人综合| 一区二区三区四区亚洲| 久久久www成人免费无遮挡大片 | 国产精品亚洲一区二区三区在线| 亚洲日本在线观看| 另类调教123区| 日韩一级完整毛片| 99re成人精品视频| 久久99精品久久久久久| 亚洲欧美一区二区视频| 精品污污网站免费看| 亚洲猫色日本管| 成人国产精品免费网站| 在线免费精品视频| 在线观看欧美黄色| 综合网在线视频| 在线成人av网站| 麻豆成人av在线| 国产农村妇女精品| 久久网站最新地址| 亚洲精品v日韩精品| 国产98色在线|日韩| 欧美色图第一页| 国产午夜亚洲精品羞羞网站| 国产亚洲欧美一级| 一区二区三区视频在线看| 天天综合日日夜夜精品| 久久不见久久见免费视频1| 成人黄色大片在线观看|