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

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

?? portfwd.c

?? 大名鼎鼎的遠(yuǎn)程登錄軟件putty的Symbian版源碼
?? C
字號(hào):
#include <stdio.h>#include <stdlib.h>#include "putty.h"#include "ssh.h"#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif#define GET_32BIT_LSB_FIRST(cp) \  (((unsigned long)(unsigned char)(cp)[0]) | \  ((unsigned long)(unsigned char)(cp)[1] << 8) | \  ((unsigned long)(unsigned char)(cp)[2] << 16) | \  ((unsigned long)(unsigned char)(cp)[3] << 24))#define PUT_32BIT_LSB_FIRST(cp, value) ( \  (cp)[0] = (value), \  (cp)[1] = (value) >> 8, \  (cp)[2] = (value) >> 16, \  (cp)[3] = (value) >> 24 )#define GET_16BIT_LSB_FIRST(cp) \  (((unsigned long)(unsigned char)(cp)[0]) | \  ((unsigned long)(unsigned char)(cp)[1] << 8))#define PUT_16BIT_LSB_FIRST(cp, value) ( \  (cp)[0] = (value), \  (cp)[1] = (value) >> 8 )#define GET_32BIT_MSB_FIRST(cp) \  (((unsigned long)(unsigned char)(cp)[0] << 24) | \  ((unsigned long)(unsigned char)(cp)[1] << 16) | \  ((unsigned long)(unsigned char)(cp)[2] << 8) | \  ((unsigned long)(unsigned char)(cp)[3]))#define PUT_32BIT_MSB_FIRST(cp, value) ( \  (cp)[0] = (value) >> 24, \  (cp)[1] = (value) >> 16, \  (cp)[2] = (value) >> 8, \  (cp)[3] = (value) )#define GET_16BIT_MSB_FIRST(cp) \  (((unsigned long)(unsigned char)(cp)[0] << 8) | \  ((unsigned long)(unsigned char)(cp)[1]))#define PUT_16BIT_MSB_FIRST(cp, value) ( \  (cp)[0] = (value) >> 8, \  (cp)[1] = (value) )struct PFwdPrivate {    const struct plug_function_table *fn;    /* the above variable absolutely *must* be the first in this structure */    void *c;			       /* (channel) data used by ssh.c */    void *backhandle;		       /* instance of SSH backend itself */    /* Note that backhandle need not be filled in if c is non-NULL */    Socket s;    int throttled, throttle_override;    int ready;    /*     * `dynamic' does double duty. It's set to 0 for an ordinary     * forwarded port, and nonzero for SOCKS-style dynamic port     * forwarding; but it also represents the state of the SOCKS     * exchange.     */    int dynamic;    /*     * `hostname' and `port' are the real hostname and port, once     * we know what we're connecting to; they're unused for this     * purpose while conducting a local SOCKS exchange, which means     * we can also use them as a buffer and pointer for reading     * data from the SOCKS client.     */    char hostname[256+8];    int port;    /*     * When doing dynamic port forwarding, we can receive     * connection data before we are actually able to send it; so     * we may have to temporarily hold some in a dynamically     * allocated buffer here.     */    void *buffer;    int buflen;};static int pfd_closing(Plug plug, const char *error_msg, int error_code,		       int calling_back){    struct PFwdPrivate *pr = (struct PFwdPrivate *) plug;    /*     * We have no way to communicate down the forwarded connection,     * so if an error occurred on the socket, we just ignore it     * and treat it like a proper close.     */    if (pr->c)	sshfwd_close(pr->c);    pfd_close(pr->s);    return 1;}static int pfd_receive(Plug plug, int urgent, char *data, int len){    struct PFwdPrivate *pr = (struct PFwdPrivate *) plug;    if (pr->dynamic) {	while (len--) {	    /*	     * Throughout SOCKS negotiation, "hostname" is re-used as a	     * random protocol buffer with "port" storing the length.	     */ 	    if (pr->port >= lenof(pr->hostname)) {		/* Request too long. */		if ((pr->dynamic >> 12) == 4) {		    /* Send back a SOCKS 4 error before closing. */		    char data[8];		    memset(data, 0, sizeof(data));		    data[1] = 91;      /* generic `request rejected' */		    sk_write(pr->s, data, 8);		}		pfd_close(pr->s);		return 1;	    }	    pr->hostname[pr->port++] = *data++;	    /*	     * Now check what's in the buffer to see if it's a	     * valid and complete message in the SOCKS exchange.	     */	    if ((pr->dynamic == 1 || (pr->dynamic >> 12) == 4) &&		pr->hostname[0] == 4) {		/*		 * SOCKS 4.		 */		if (pr->dynamic == 1)		    pr->dynamic = 0x4000;		if (pr->port < 2) continue;/* don't have command code yet */		if (pr->hostname[1] != 1) {		    /* Not CONNECT. */		    /* Send back a SOCKS 4 error before closing. */		    char data[8];		    memset(data, 0, sizeof(data));		    data[1] = 91;      /* generic `request rejected' */		    sk_write(pr->s, data, 8);		    pfd_close(pr->s);		    return 1;		}		if (pr->port <= 8) continue; /* haven't started user/hostname */		if (pr->hostname[pr->port-1] != 0)		    continue;	       /* haven't _finished_ user/hostname */		/*		 * Now we have a full SOCKS 4 request. Check it to		 * see if it's a SOCKS 4A request.		 */		if (pr->hostname[4] == 0 && pr->hostname[5] == 0 &&		    pr->hostname[6] == 0 && pr->hostname[7] != 0) {		    /*		     * It's SOCKS 4A. So if we haven't yet		     * collected the host name, we should continue		     * waiting for data in order to do so; if we		     * have, we can go ahead.		     */		    int len;		    if (pr->dynamic == 0x4000) {			pr->dynamic = 0x4001;			pr->port = 8;      /* reset buffer to overwrite name */			continue;		    }		    pr->hostname[0] = 0;   /* reply version code */		    pr->hostname[1] = 90;   /* request granted */		    sk_write(pr->s, pr->hostname, 8);		    len= pr->port - 8;		    pr->port = GET_16BIT_MSB_FIRST(pr->hostname+2);		    memmove(pr->hostname, pr->hostname + 8, len);		    goto connect;		} else {		    /*		     * It's SOCKS 4, which means we should format		     * the IP address into the hostname string and		     * then just go.		     */		    pr->hostname[0] = 0;   /* reply version code */		    pr->hostname[1] = 90;   /* request granted */		    sk_write(pr->s, pr->hostname, 8);		    pr->port = GET_16BIT_MSB_FIRST(pr->hostname+2);		    sprintf(pr->hostname, "%d.%d.%d.%d",			    (unsigned char)pr->hostname[4],			    (unsigned char)pr->hostname[5],			    (unsigned char)pr->hostname[6],			    (unsigned char)pr->hostname[7]);		    goto connect;		}	    }	    if ((pr->dynamic == 1 || (pr->dynamic >> 12) == 5) &&		pr->hostname[0] == 5) {		/*		 * SOCKS 5.		 */		if (pr->dynamic == 1)		    pr->dynamic = 0x5000;		if (pr->dynamic == 0x5000) {		    int i, method;		    char data[2];		    /*		     * We're receiving a set of method identifiers.		     */		    if (pr->port < 2) continue;/* no method count yet */		    if (pr->port < 2 + (unsigned char)pr->hostname[1])			continue;      /* no methods yet */		    method = 0xFF;     /* invalid */		    for (i = 0; i < (unsigned char)pr->hostname[1]; i++)			if (pr->hostname[2+i] == 0) {			    method = 0;/* no auth */			    break;			}		    data[0] = 5;		    data[1] = method;		    sk_write(pr->s, data, 2);		    pr->dynamic = 0x5001;		    pr->port = 0;      /* re-empty the buffer */		    continue;		}		if (pr->dynamic == 0x5001) {		    /*		     * We're receiving a SOCKS request.		     */		    unsigned char reply[10]; /* SOCKS5 atyp=1 reply */		    int atype, alen = 0;		    /*		     * Pre-fill reply packet.		     * In all cases, we set BND.{HOST,ADDR} to 0.0.0.0:0		     * (atyp=1) in the reply; if we succeed, we don't know		     * the right answers, and if we fail, they should be		     * ignored.		     */		    memset(reply, 0, lenof(reply));		    reply[0] = 5; /* VER */		    reply[3] = 1; /* ATYP = 1 (IPv4, 0.0.0.0:0) */		    if (pr->port < 6) continue;		    atype = (unsigned char)pr->hostname[3];		    if (atype == 1)    /* IPv4 address */			alen = 4;		    if (atype == 4)    /* IPv6 address */			alen = 16;		    if (atype == 3)    /* domain name has leading length */			alen = 1 + (unsigned char)pr->hostname[4];		    if (pr->port < 6 + alen) continue;		    if (pr->hostname[1] != 1 || pr->hostname[2] != 0) {			/* Not CONNECT or reserved field nonzero - error */			reply[1] = 1;	/* generic failure */			sk_write(pr->s, (char *) reply, lenof(reply));			pfd_close(pr->s);			return 1;		    }		    /*		     * Now we have a viable connect request. Switch		     * on atype.		     */		    pr->port = GET_16BIT_MSB_FIRST(pr->hostname+4+alen);		    if (atype == 1) {			/* REP=0 (success) already */			sk_write(pr->s, (char *) reply, lenof(reply));			sprintf(pr->hostname, "%d.%d.%d.%d",				(unsigned char)pr->hostname[4],				(unsigned char)pr->hostname[5],				(unsigned char)pr->hostname[6],				(unsigned char)pr->hostname[7]);			goto connect;		    } else if (atype == 3) {			/* REP=0 (success) already */			sk_write(pr->s, (char *) reply, lenof(reply));			memmove(pr->hostname, pr->hostname + 5, alen-1);			pr->hostname[alen-1] = '\0';			goto connect;		    } else {			/*			 * Unknown address type. (FIXME: support IPv6!)			 */			reply[1] = 8;	/* atype not supported */			sk_write(pr->s, (char *) reply, lenof(reply));			pfd_close(pr->s);			return 1;		    }		}	    }	    /*	     * If we get here without either having done `continue'	     * or `goto connect', it must be because there is no	     * sensible interpretation of what's in our buffer. So	     * close the connection rudely.	     */	    pfd_close(pr->s);	    return 1;	}	return 1;	/*	 * We come here when we're ready to make an actual	 * connection.	 */	connect:	pr->c = new_sock_channel(pr->backhandle, pr->s);	if (pr->c == NULL) {	    pfd_close(pr->s);	    return 1;	} else {	    /* asks to forward to the specified host/port for this */	    ssh_send_port_open(pr->c, pr->hostname, pr->port, "forwarding");	}	pr->dynamic = 0;	/*	 * Now freeze the socket until the SSH server confirms the	 * connection.	 */	sk_set_frozen(pr->s, 1);	/*	 * If there's any data remaining in our current buffer,	 * save it to be sent on pfd_confirm().	 */	if (len > 0) {	    pr->buffer = snewn(len, char);	    memcpy(pr->buffer, data, len);	    pr->buflen = len;	}    }    if (pr->ready) {	if (sshfwd_write(pr->c, data, len) > 0) {	    pr->throttled = 1;	    sk_set_frozen(pr->s, 1);	}    }    return 1;}static void pfd_sent(Plug plug, int bufsize){    struct PFwdPrivate *pr = (struct PFwdPrivate *) plug;    if (pr->c)	sshfwd_unthrottle(pr->c, bufsize);}/* * Called when receiving a PORT OPEN from the server */const char *pfd_newconnect(Socket *s, char *hostname, int port,			   void *c, const Config *cfg){    static const struct plug_function_table fn_table = {	pfd_closing,	pfd_receive,	pfd_sent,	NULL    };    SockAddr addr;    const char *err;    char *dummy_realhost;    struct PFwdPrivate *pr;    /*     * Try to find host.     */    addr = name_lookup(hostname, port, &dummy_realhost, cfg);    if ((err = sk_addr_error(addr)) != NULL) {	sk_addr_free(addr);	return err;    }    /*     * Open socket.     */    pr = snew(struct PFwdPrivate);    pr->buffer = NULL;    pr->fn = &fn_table;    pr->throttled = pr->throttle_override = 0;    pr->ready = 1;    pr->c = c;    pr->backhandle = NULL;	       /* we shouldn't need this */    pr->dynamic = 0;    pr->s = *s = new_connection(addr, dummy_realhost, port,				0, 1, 0, 0, (Plug) pr, cfg);    if ((err = sk_socket_error(*s)) != NULL) {	sfree(pr);	return err;    }    sk_set_private_ptr(*s, pr);    return NULL;}/* called when someone connects to the local port */static int pfd_accepting(Plug p, OSSocket sock){    static const struct plug_function_table fn_table = {	pfd_closing,	pfd_receive,	pfd_sent,	NULL    };    struct PFwdPrivate *pr, *org;    Socket s;    const char *err;    org = (struct PFwdPrivate *)p;    pr = snew(struct PFwdPrivate);    pr->buffer = NULL;    pr->fn = &fn_table;    pr->c = NULL;    pr->backhandle = org->backhandle;    pr->s = s = sk_register(sock, (Plug) pr);    if ((err = sk_socket_error(s)) != NULL) {	sfree(pr);	return err != NULL;    }    sk_set_private_ptr(s, pr);    pr->throttled = pr->throttle_override = 0;    pr->ready = 0;    if (org->dynamic) {	pr->dynamic = 1;	pr->port = 0;		       /* "hostname" buffer is so far empty */	sk_set_frozen(s, 0);	       /* we want to receive SOCKS _now_! */    } else {	pr->dynamic = 0;	strcpy(pr->hostname, org->hostname);	pr->port = org->port;		pr->c = new_sock_channel(org->backhandle, s);	if (pr->c == NULL) {	    sfree(pr);	    return 1;	} else {	    /* asks to forward to the specified host/port for this */	    ssh_send_port_open(pr->c, pr->hostname, pr->port, "forwarding");	}    }    return 0;}/* Add a new forwarding from port -> desthost:destport sets up a listener on the local machine on (srcaddr:)port */const char *pfd_addforward(char *desthost, int destport, char *srcaddr,			   int port, void *backhandle, const Config *cfg){    static const struct plug_function_table fn_table = {	pfd_closing,	pfd_receive,		       /* should not happen... */	pfd_sent,		       /* also should not happen */	pfd_accepting    };    const char *err;    struct PFwdPrivate *pr;    Socket s;    /*     * Open socket.     */    pr = snew(struct PFwdPrivate);    pr->buffer = NULL;    pr->fn = &fn_table;    pr->c = NULL;    if (desthost) {	strcpy(pr->hostname, desthost);	pr->port = destport;	pr->dynamic = 0;    } else	pr->dynamic = 1;    pr->throttled = pr->throttle_override = 0;    pr->ready = 0;    pr->backhandle = backhandle;    pr->s = s = new_listener(srcaddr, port, (Plug) pr,			     !cfg->lport_acceptall, cfg);    if ((err = sk_socket_error(s)) != NULL) {	sfree(pr);	return err;    }    sk_set_private_ptr(s, pr);    return NULL;}void pfd_close(Socket s){    struct PFwdPrivate *pr;    if (!s)	return;    pr = (struct PFwdPrivate *) sk_get_private_ptr(s);    sfree(pr->buffer);    sfree(pr);    sk_close(s);}void pfd_unthrottle(Socket s){    struct PFwdPrivate *pr;    if (!s)	return;    pr = (struct PFwdPrivate *) sk_get_private_ptr(s);    pr->throttled = 0;    sk_set_frozen(s, pr->throttled || pr->throttle_override);}void pfd_override_throttle(Socket s, int enable){    struct PFwdPrivate *pr;    if (!s)	return;    pr = (struct PFwdPrivate *) sk_get_private_ptr(s);    pr->throttle_override = enable;    sk_set_frozen(s, pr->throttled || pr->throttle_override);}/* * Called to send data down the raw connection. */int pfd_send(Socket s, char *data, int len){    if (s == NULL)	return 0;    return sk_write(s, data, len);}void pfd_confirm(Socket s){    struct PFwdPrivate *pr;    if (s == NULL)	return;    pr = (struct PFwdPrivate *) sk_get_private_ptr(s);    pr->ready = 1;    sk_set_frozen(s, 0);    sk_write(s, NULL, 0);    if (pr->buffer) {	sshfwd_write(pr->c, pr->buffer, pr->buflen);	sfree(pr->buffer);	pr->buffer = NULL;    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区很污很色的| 欧美大片在线观看一区| 一区二区三区中文免费| 精品视频一区三区九区| 日韩成人一区二区三区在线观看| 日韩欧美激情在线| av一区二区三区在线| 亚洲一区二区三区免费视频| 欧美va亚洲va国产综合| av在线不卡观看免费观看| 三级久久三级久久久| 国产日韩精品一区二区三区| 成人精品免费看| 天天色天天操综合| 欧美韩日一区二区三区| 欧美日韩1234| 国产不卡一区视频| 偷窥少妇高潮呻吟av久久免费| 久久综合成人精品亚洲另类欧美| av在线播放成人| 蜜桃av一区二区三区| 国产精品福利一区二区| 日韩一级片在线播放| 91丨porny丨户外露出| 蜜臀99久久精品久久久久久软件| 中文字幕av资源一区| 欧美精品自拍偷拍| 91免费在线看| 国产传媒欧美日韩成人| 三级精品在线观看| 亚洲视频一二区| 精品国产免费一区二区三区四区 | 天涯成人国产亚洲精品一区av| 欧美精品一区二区在线播放| 在线观看视频欧美| 盗摄精品av一区二区三区| 日韩精品亚洲专区| 国产精品短视频| 久久久综合精品| 91精品国产高清一区二区三区| 99久久精品免费看| 国产精品18久久久久| 奇米影视7777精品一区二区| 亚洲码国产岛国毛片在线| 久久色视频免费观看| 91精品国产91久久久久久最新毛片| 一本色道久久综合亚洲91| 国产a视频精品免费观看| 日韩精品亚洲一区二区三区免费| 亚洲精品免费在线| 中文字幕第一页久久| 久久久91精品国产一区二区精品| 欧美日韩国产天堂| 91久久精品国产91性色tv| 成人精品亚洲人成在线| 粉嫩av一区二区三区| 国产在线精品一区在线观看麻豆| 日韩电影免费在线看| 视频一区在线视频| 性久久久久久久久久久久| 一区二区不卡在线播放 | 国产精品不卡视频| 国产目拍亚洲精品99久久精品| 欧美不卡一区二区三区四区| 91精品国产综合久久久久久久久久 | 精品一区在线看| 秋霞av亚洲一区二区三| 午夜不卡av在线| 午夜不卡av免费| 首页国产欧美久久| 男人的j进女人的j一区| 久久精工是国产品牌吗| 青青草原综合久久大伊人精品| 香蕉加勒比综合久久| 高清国产一区二区三区| 大桥未久av一区二区三区中文| 国产精品一区二区在线播放| 国产999精品久久久久久绿帽| 国产福利一区二区三区视频| 高清免费成人av| 99精品在线观看视频| 色八戒一区二区三区| 欧美视频一区在线| 欧美一级片免费看| 久久综合久久综合九色| 国产色一区二区| 亚洲色大成网站www久久九九| 又紧又大又爽精品一区二区| 亚洲v中文字幕| 免费成人深夜小野草| 国产成人在线看| 91久久精品一区二区| 欧美一区二区观看视频| 久久久久久久久久久久电影| 日本一区二区三区久久久久久久久不| 中文一区二区在线观看| 亚洲色图视频网| 日韩国产精品久久| 国产成人无遮挡在线视频| 色综合久久中文综合久久牛| 51精品视频一区二区三区| 久久综合五月天婷婷伊人| 国产精品电影一区二区三区| 亚洲国产一区二区视频| 精彩视频一区二区三区| 成人av在线网| 欧美男女性生活在线直播观看| xnxx国产精品| 亚洲精品视频自拍| 免费观看久久久4p| 不卡视频一二三| 欧美老肥妇做.爰bbww| 久久蜜桃一区二区| 亚洲最快最全在线视频| 韩国精品久久久| 欧洲色大大久久| 久久美女艺术照精彩视频福利播放| 亚洲日本va在线观看| 久久99国产精品尤物| 色哟哟国产精品| 精品久久久久久亚洲综合网| 综合自拍亚洲综合图不卡区| 麻豆国产欧美日韩综合精品二区| av在线综合网| 久久综合久久综合久久综合| 一区二区高清视频在线观看| 国产99久久久国产精品| 91 com成人网| 成人欧美一区二区三区小说 | gogogo免费视频观看亚洲一| 91精品国产综合久久精品图片| 国产精品丝袜一区| 蜜桃免费网站一区二区三区| 色综合中文字幕国产| 久久精品一区蜜桃臀影院| 亚洲成人久久影院| bt7086福利一区国产| 久久久久久一二三区| 秋霞午夜鲁丝一区二区老狼| 在线观看亚洲精品视频| 国产人久久人人人人爽| 久久99精品久久久| 91精品综合久久久久久| 亚洲免费在线播放| 99在线热播精品免费| 久久久久国产精品麻豆ai换脸| 日本成人在线一区| 在线观看国产日韩| 亚洲人成小说网站色在线| 成人精品免费网站| 日本一区二区三区久久久久久久久不| 美国毛片一区二区| 91麻豆精品国产91久久久使用方法| 亚洲精品高清在线观看| 91香蕉国产在线观看软件| 欧美国产成人精品| 豆国产96在线|亚洲| 久久久99免费| 国产在线播精品第三| 精品精品国产高清a毛片牛牛 | 一区二区三区四区国产精品| 国产高清不卡二三区| 久久综合九色综合欧美就去吻| 奇米色777欧美一区二区| 欧美人妖巨大在线| 丝袜美腿高跟呻吟高潮一区| 欧美在线一区二区| 亚洲国产中文字幕| 欧美日韩在线播放三区四区| 亚洲一级二级三级| 欧美日韩电影在线播放| 婷婷国产在线综合| 91精品国产免费| 久久99久久久久久久久久久| 日韩视频一区二区三区| 麻豆91免费看| 久久综合成人精品亚洲另类欧美| 国产主播一区二区| 国产日产欧美一区二区视频| 福利电影一区二区| 国产精品白丝在线| 色偷偷成人一区二区三区91| 亚洲自拍与偷拍| 日韩一卡二卡三卡国产欧美| 国产在线不卡视频| 国产精品久久久久aaaa樱花| av电影天堂一区二区在线| 亚洲你懂的在线视频| 欧美午夜一区二区三区免费大片| 亚洲午夜精品久久久久久久久| 欧美日产国产精品| 久久99久国产精品黄毛片色诱| 久久精品人人做人人综合 | 91精品国产一区二区三区| 日韩电影在线观看一区| 久久色.com| 97精品超碰一区二区三区| 一区二区三区视频在线观看| 欧美日韩国产首页| 国产一本一道久久香蕉|