📄 00000005.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: scaner (S.c.a.n.e.R), 信区: Linux <BR>标 题: ftpdatapipe.c----支持ftp的datapipe.c <BR>发信站: BBS 水木清华站 (Thu May 14 21:18:05 1998) <BR> <BR>ftp需要两个tcp连接,为此,我修改了一下datapipe.c <BR>使它能够支持ftp.主要的改动是增加了对port命令的处理, <BR> <BR>fp.c <BR>---Begin--- <BR> <BR>#include <sys/types.h> <BR>#include <sys/socket.h> <BR>#include <sys/wait.h> <BR>#include <netinet/in.h> <BR>#include <stdio.h> <BR>#include <stdlib.h> <BR>#include <errno.h> <BR>#include <unistd.h> <BR>#include <netdb.h> <BR>#include <string.h> <BR> <BR>#ifdef STRERROR <BR>extern char *sys_errlist[]; <BR>extern int sys_nerr; <BR>char *undef = "Undefined error"; <BR> <BR>char *strerror(error) <BR>int error; <BR>{ <BR> if (error > sys_nerr) <BR> return undef; <BR> return sys_errlist[error]; <BR>} <BR>#endif <BR> <BR> <BR>int main(int argc,char *argv[]) <BR>{ <BR> int lsock,csock,csock2,osock,osock2,sock; <BR> FILE *cfile; <BR> char buf[4096]; <BR> struct sockaddr_in laddr,caddr,oaddr; <BR> int caddrlen=sizeof(caddr); <BR> int laddrlen=sizeof(laddr); <BR> fd_set fdsr,fdse; <BR> struct hostent *h; <BR> int nbyt; <BR> unsigned long a,localip,cip; <BR> unsigned short oport,cport,lport; <BR> <BR> unsigned c1,c2,c3,c4,c5,c6; <BR> perror("+START"); <BR> if(argc!=4) <BR> { <BR> fprintf(stderr,"Usage: %s localport remoteport remotehost\n",argv[0]); <BR> return 3; <BR> } <BR> <BR> if (gethostname(buf,4096)==-1) <BR> { <BR> perror("gethostname"); <BR> return 5; <BR> } <BR> <BR> <BR> if (!(h = gethostbyname(buf))) <BR> { <BR> perror("gethostbyname"); <BR> return 7; <BR> } <BR> <BR> memcpy(&localip,h->h_addr,sizeof(localip)); <BR> printf("Local Name: %s Local IP: %X\n",buf,localip); <BR> a = inet_addr(argv[3]); <BR> if (!(h = gethostbyname(argv[3])) && <BR> !(h = gethostbyaddr(&a, 4, AF_INET))) { <BR> perror(argv[3]); <BR> return 4; <BR> } <BR> <BR> oport=atol(argv[2]); <BR> laddr.sin_port= htons((unsigned short)(atol(argv[1]))); <BR> <BR> if ((lsock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1) <BR> { <BR> perror("socket"); <BR> return 2; <BR> } <BR> <BR> laddr.sin_family = htons(AF_INET); <BR> laddr.sin_addr.s_addr = htonl(0); <BR> if (bind(lsock,&laddr,sizeof(laddr))) <BR> { <BR> perror("bind"); <BR> return 2; <BR> } <BR> <BR> if (listen(lsock,1)) <BR> { <BR> perror("listen"); <BR> return 2; <BR> } <BR> <BR> if ((nbyt = fork()) == -1) <BR> { <BR> perror("fork"); <BR> return 2; <BR> } <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -