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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? telnet.c

?? 嵌入式TCPIP協(xié)議棧的源代碼!
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* Telnet utility for 'TCP/IP Lean' (c) Iosoft Ltd. 2000

This software is only licensed for distribution with the book 'TCP/IP Lean',
and may only be used for personal experimentation by the purchaser
of that book, on condition that this copyright notice is retained.
For commercial licensing, contact license@iosoft.co.uk

This is experimental software; use it entirely at your own risk. The author
offers no warranties of any kind, including its fitness for purpose. */
/*
** v0.01 JPB 27/1/00
** v0.02 JPB 28/1/00  First steps toward TCP implementation
** v0.03 JPB 31/1/00  Added timeout
** v0.04 JPB 1/2/00   Added duplicate segment handling
** v0.05 JPB 2/2/00   Added TCP upcall, and active close
** v0.06 JPB 3/2/00   Simplified socket closure
** v0.07 JPB 4/2/00   Simplified state machine
** v0.08 JPB 4/2/00   Split upcalls into client & server
** v0.09 JPB 7/2/00   Improved active close
** v0.10 JPB 1/3/00   Fixed 'gate_ip' problem when no gateway specified
**                    Fixed problem with SLIP node matching
** v0.11 JPB 1/3/00   changed command-line interface to include port names
** v0.12 JPB 20/3/00  Added LiteLink and modem support
** v0.13 JPB 23/3/00  Used upcall pointers in TCP.C
** v0.14 JPB 6/4/00   Replaced 'strcmpi' with 'stricmp' for DJGPP compatibility
** v0.15 JPB 21/4/00  Fixed TCP problem receiving FIN + data
** v0.16 JPB 5/5/00   Minor cosmetic improvements to TCP code
** v0.17 JPB 3/7/00   Changed default config file to TCPLEAN.CFG
**                    Revised header for book CD
*/

#define VERSION "0.17"

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <signal.h>
#include <time.h>

#include "ether.h"
#include "netutil.h"
#include "net.h"
#include "ip.h"
#include "tcp.h"

#define CFGFILE     "tcplean.cfg"   /* Default config filename */
#define CFGEXT      ".cfg"          /* Default config extension */
#define MAXNETCFG   40              /* Max length of a net config string */
#define DEFPORT     TELPORT         /* Default port number */

/* Test page for Web server */
#define MYPAGE "HTTP/1.0 200 OK\r\n\r\n\
    <html><body>Test page from telnet server v" VERSION "</body></html>"

GENFRAME genframe;                  /* Frame for network Tx/Rx */
char cfgfile[MAXPATH+5]=CFGFILE;    /* Config filename */
char netcfg[MAXNETCFG+1]="??";      /* Network config string */
extern BYTE bcast[MACLEN];          /* Broadcast Ethernet addr */
NODE  locnode;                      /* My Ethernet and IP addresses */
int breakflag;                      /* Flag to indicate ctrl-break pressed */
char *clientcmd;                    /* Pointer to command-line command */

/* Debug flags */
extern int netdebug;                /* Verbose packet display */
extern int tcpdebug;                /* TCP frame display */
extern int statedebug;              /* TCP state display */

/* Socket storage */
#define NSOCKS 2
TSOCK tsocks[NSOCKS] =              /* Initialise index num and buffer sizes */
{
    {1,{_CBUFFLEN_},{_CBUFFLEN_}}, {2,{_CBUFFLEN_},{_CBUFFLEN_}}
};

/* Telnet options */
BYTE telopts[] =
{
    TEL_IAC, TEL_DO,    TEL_SGA,    /* Do suppress go-ahead */
    TEL_IAC, TEL_WONT,  TEL_ECHO,   /* Won't echo */
    TEL_IAC, TEL_WONT,  TEL_AUTH    /* Won't authenticate */
};

/* Function pointers: upcalls from TCP/IP stack */
extern NODE *(*get_locnode_n)(int n);                   /* Get local node */
extern int (*server_upcall)(TSOCK *ts, CONN_STATE conn);/* TCP server action */
extern int (*client_upcall)(TSOCK *ts, CONN_STATE conn);/* TCP client action */

/* Prototypes */
WORD read_netconfig(char *fname, NODE *np);
NODE *locnode_n(int n);
int server_action(TSOCK *ts, CONN_STATE conn);
int client_action(TSOCK *ts, CONN_STATE conn);
void do_teldisp(TSOCK *ts);
void do_receive(GENFRAME *gfp);
void do_poll(GENFRAME *gfp);
WORD str2service(char *str);
void disp_usage(void);
void break_handler(int sig);

int main(int argc, char *argv[])
{
    int args=0, err=0, client=0, fail, n;
    char *p, temps[18], k=0, c;
    WORD dtype;
    GENFRAME *gfp;
    LWORD mstimer;
    TSOCK *ts;
    NODE rem;

    printf("TELNET v" VERSION "\n");            /* Sign on */
    get_locnode_n = locnode_n;                  /* Set upcall ptrs to funcs */
    server_upcall = server_action;
    client_upcall = client_action;
    signal(SIGINT, break_handler);              /* Trap ctrl-C */
    ts = &tsocks[0];                            /* Pointer to client socket */
    memset(&rem, 0, sizeof(rem));               /* Preset remote port number */
    rem.port = DEFPORT;
    while (argc > ++args)                       /* Process command-line args */
    {
        if ((c=argv[args][0])=='-' || c=='/')
        {
            switch (toupper(argv[args][1]))
            {
            case 'C':                           /* -C: config filename */
                strncpy(cfgfile, argv[++args], MAXPATH);
                if ((p=strrchr(cfgfile, '.'))==0 || !isalpha(*(p+1)))
                    strcat(cfgfile, CFGEXT);
                break;
            case 'S':                           /* -S: display TCP states */
                statedebug = 1;
                break;
            case 'T':                           /* -T: display TCP segments */
                tcpdebug = 1;
                break;
            case 'V':                           /* -V: verbose packet display */
                netdebug |= 1;
                break;
            case 'X':                           /* -X: hex packet display */
                netdebug |= 2;
                break;
            default:
                err = 1;
            }
        }
        else if (client==0 && isdigit(c))       /* If client mode.. */
        {
            rem.ip = atoip(argv[args]);         /* Get destination IP address */
            client++;
        }                                       /* ..then port num/name */
        else if (client==1 && (rem.port=str2service(argv[args]))!=0)
            client++;
        else if (client == 2)
        {
            clientcmd = argv[args];             /* ..then command string */
            client++;
        }

    }
    if (err || rem.port==0)                     /* Prompt user if error */
        disp_usage();
    else if (!(dtype=read_netconfig(cfgfile, &locnode)))
        printf("Invalid configuration '%s'\n", cfgfile);
    else
    {
        rem.dtype = genframe.g.dtype = dtype;   /* Set frame driver type */
        gfp = &genframe;                        /* Get pointer to frame */
        printf("IP %s", ipstr(locnode.ip, temps));
        printf(" mask %s", ipstr(locnode.mask, temps));
        if (locnode.gate)
            printf(" gate %s", ipstr(locnode.gate, temps));
        if (dtype & DTYPE_ETHER)
            printf(" Ethernet %s", ethstr(locnode.mac, temps));
        if (client && !on_subnet(rem.ip, &locnode) && !locnode.gate)
            printf("\nWARNING: no gateway specified!");
        printf("\nPress ESC or ctrl-C to exit\n\n");
        if (client)                             /* If client, open socket */
            open_tcp(ts, gfp, &locnode, &rem);
        while (!breakflag && k!=0x1b)           /* Main loop.. */
        {
            do_receive(gfp);                    /* Receive frames */
            do_poll(gfp);                       /* Poll net drivers */
            if (client)
            {
                do_teldisp(ts);                 /* Telnet client display */
                if (!ts->state)                 /* If closed */
                    breakflag = 1;              /* ..exit from main loop */
                else if (k)                     /* If key pressed.. */
                    buff_in(&ts->txb, (BYTE *)&k, 1);
                k = 0;                          /* ..send it */
            }
            if (kbhit())                        /* Get keypress */
                k = getch();
        }                                       /* Close connection */
        if (k)
            printf("Closing...\n");
        mstimeout(&mstimer, 0);                 /* Refresh timer */
        do
        {                                       /* Loop until conns closed */
            for (n=fail=0; n<NSOCKS; n++)
                fail += !close_tcp(&tsocks[n]);
            do_receive(gfp);
            do_poll(gfp);                       /* ..or timeout */
        } while (!mstimeout(&mstimer, 1000) && fail);
        if (fail)                               /* If still open.. */
        {
            printf("Resetting connections\n");
            for (n=0; n<NSOCKS; n++)            /* ..send reset */
                reset_tcp(&tsocks[n], gfp);
            while (!mstimeout(&mstimer, 1000))
            {                                   /* ..and wait until sent */
                do_receive(gfp);
                do_poll(gfp);
            }
        }
        close_net(dtype);                       /* Shut down net driver */
    }
    return(0);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久三区| 欧美日韩精品一区二区三区| 国产一区二区毛片| av午夜精品一区二区三区| 欧美午夜电影网| 久久人人97超碰com| 一区二区三区波多野结衣在线观看| 免费成人在线观看| 成人动漫中文字幕| 日韩精品中文字幕在线不卡尤物| 国产精品家庭影院| 精品一区二区三区免费观看| 色综合婷婷久久| 久久这里只有精品视频网| 一区二区在线看| 开心九九激情九九欧美日韩精美视频电影| 国产乱理伦片在线观看夜一区| 精品视频在线免费观看| 日本一区二区电影| 久久电影国产免费久久电影| 91国偷自产一区二区三区成为亚洲经典 | 久久综合九色欧美综合狠狠| 亚洲在线成人精品| heyzo一本久久综合| 亚洲激情一二三区| 精品国精品国产尤物美女| 亚洲自拍另类综合| 成人网男人的天堂| 日韩一区二区电影网| 一区二区三区不卡在线观看| www.欧美.com| 日韩精品在线一区| 天天av天天翘天天综合网| www.亚洲免费av| 日本一区二区三区四区在线视频| 蜜桃视频免费观看一区| 欧美日韩中文另类| 亚洲精品精品亚洲| 99这里只有久久精品视频| 久久九九影视网| 精一区二区三区| 欧美一级在线观看| 日韩激情中文字幕| 色呦呦网站一区| 国产精品天美传媒| 国产精品亚洲一区二区三区在线| 欧美一区二区免费| 午夜久久久久久久久| 欧美中文字幕一区二区三区 | 波多野结衣欧美| 久久综合九色综合97婷婷| 日本大胆欧美人术艺术动态| 在线免费av一区| 亚洲精品国产第一综合99久久| 不卡区在线中文字幕| 国产精品色哟哟| 成人小视频在线| 国产精品久久久久久久久久久免费看 | 91麻豆精品久久久久蜜臀| 夜色激情一区二区| 在线观看成人小视频| 亚洲综合激情小说| 欧美日韩免费观看一区三区| 亚洲午夜电影在线观看| 97aⅴ精品视频一二三区| 综合中文字幕亚洲| 91亚洲精品久久久蜜桃| 亚洲美女视频一区| www.亚洲精品| 一区二区三区在线看| 欧美在线一区二区三区| 五月天欧美精品| 日韩视频不卡中文| 国模冰冰炮一区二区| 国产亚洲一区二区在线观看| 丁香婷婷综合激情五月色| 337p日本欧洲亚洲大胆精品| 国产美女一区二区| 国产精品久久久久久久久久免费看| 一本久久综合亚洲鲁鲁五月天| 夜夜精品浪潮av一区二区三区| 欧美无砖专区一中文字| 日本不卡一二三| 久久一区二区三区四区| 成人免费电影视频| 亚洲精品日韩一| 宅男噜噜噜66一区二区66| 精品亚洲porn| 麻豆精品一二三| 精品国产一区二区三区av性色| 国产久卡久卡久卡久卡视频精品| 中文字幕亚洲成人| 欧美日韩一区二区三区视频| 麻豆成人综合网| 欧美激情一区二区三区不卡| 色综合色狠狠综合色| 秋霞午夜鲁丝一区二区老狼| 精品日韩一区二区| 99久久99久久精品免费看蜜桃| 一区二区国产视频| 337p亚洲精品色噜噜| 国产白丝网站精品污在线入口| 亚洲三级久久久| 日韩一级完整毛片| 粉嫩aⅴ一区二区三区四区| 一区二区高清在线| 日韩欧美色综合网站| 99re这里只有精品6| 日韩精品乱码免费| 国产精品天天看| 6080国产精品一区二区| 风流少妇一区二区| 蜜臀av在线播放一区二区三区| 成人免费在线观看入口| 久久伊人中文字幕| 制服丝袜激情欧洲亚洲| 91麻豆成人久久精品二区三区| 精品一区二区三区免费| 图片区日韩欧美亚洲| 亚洲欧美日韩一区二区| 久久精品一区二区| 宅男在线国产精品| 欧美色精品天天在线观看视频| 成人黄色电影在线| 国产资源精品在线观看| 日韩中文欧美在线| 亚洲第一福利视频在线| 亚洲品质自拍视频网站| 日本一区二区三区高清不卡| 日韩免费高清视频| 这里只有精品电影| 欧美日本国产视频| 一本色道a无线码一区v| 不卡一卡二卡三乱码免费网站| 国产一区二区伦理| 韩国精品免费视频| 激情久久五月天| 久久99国产精品免费网站| 日韩激情视频在线观看| 亚洲国产成人av| 亚洲一二三四久久| 亚洲六月丁香色婷婷综合久久 | 欧美在线观看一区| 成人视屏免费看| 国产精品一卡二卡在线观看| 激情综合五月天| 久久国产麻豆精品| 久久国产精品露脸对白| 日本欧美一区二区三区| 三级欧美在线一区| 日日夜夜免费精品| 奇米在线7777在线精品| 日本女人一区二区三区| 琪琪久久久久日韩精品| 美女免费视频一区| 麻豆久久久久久久| 韩国欧美国产1区| 激情亚洲综合在线| 国产自产高清不卡| 国产成人在线影院 | 视频一区在线播放| 欧美日韩精品一区二区三区| 欧美丝袜丝nylons| 欧美日韩成人综合天天影院| 欧美日本韩国一区二区三区视频 | 99久久综合国产精品| 99re6这里只有精品视频在线观看| 99这里只有久久精品视频| 91老师片黄在线观看| 91极品美女在线| 91国产免费看| 欧美精品丝袜中出| 日韩视频一区二区三区在线播放| 欧美一区二区三区免费在线看 | 91福利在线看| 欧美精品乱码久久久久久| 宅男噜噜噜66一区二区66| 精品久久人人做人人爽| 欧美国产视频在线| 亚洲精品少妇30p| 日韩精品福利网| 国产一区999| 99久久夜色精品国产网站| 欧美系列一区二区| 日韩一区二区精品葵司在线| 国产视频亚洲色图| 亚洲三级在线免费| 日日夜夜免费精品| 国产乱人伦精品一区二区在线观看| 成人精品视频一区二区三区 | 菠萝蜜视频在线观看一区| 日韩精品欧美精品| 国产成人综合在线观看| 成人激情小说网站| 欧美在线一区二区| 日韩欧美资源站| 国产精品美女久久久久久2018| 亚洲男人电影天堂| 蜜桃视频免费观看一区| 粉嫩av一区二区三区在线播放|