- 论坛徽章:
- 0
|
我的程序如下,帮忙看看:
serv.c
=====
- #include <sys/socket.h>;
- #include <netinst.h>;
- #include <stdlib.h>;
- int main()
- {
- char *name[2];
- int fd,fd2,fromlen;
- struct sockaddr_in serv;
- fd=socket(AF_INET,SOCK_STREAM,0);
- serv.sin_addr.s_addr=0;
- serv.sin_port=htons("1234");
- serv.sin_family=AF_INET;
- bind(fd,(struct sockaddr *)&serv,16);
- listen(fd,1);
- fromlen=16; /*(sizeof(struct sockaddr)*/
- fd2=accept(fd,(struct sockaddr *)&serv,&fromlen);
- /* "connect" fd2 to stdin,stdout,stderr */
- dup2(fd2,0);
- dup2(fd2,1);
- dup2(fd2,2);
- name[0]="/bin/sh";
- name[1]=NULL;
- execve(name[0],name,NULL);
- }
复制代码
我在tty1运行这个程序,然后在tty2执行:
$ telnet localhost 1234
Trying 127.0.0.1...
Connected to lubo.
Escape character is '^]'.
ls
: command not found
/bin/ls
: No such file or directory
这是怎么回事?我另外测试了一个server程序,却可以读取stdin,如下:
test.c
=====
- #include <stdlio.h>;
- main()
- {
- char buf[] = "12345678";
- gets(buf);
- puts(buf);
- }
复制代码
然后修改serv.c的19行:name[0]="test";
编以后运行,在tty2上执行:
$ telnet localhost 1234
Trying 127.0.0.1...
Connected to lubo.
Escape character is '^]'.
asdf
asdf
Connection closed by foreign host.
请高手指点,谢谢。 |
|