免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1784 | 回复: 8
打印 上一主题 下一主题

怎样重定向程序的输入和输出到一个本地端口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-16 12:40 |只看该作者 |倒序浏览
我想用hotwayd,需要inetd守护在pop3端口,但我没有root权限,所以只能靠重定向

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-07-16 12:46 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

sorry, 不清楚 hotwayd 是怎麼樣的.

光從題目來看, 我會認為用 shell 較難做到,
看起來要寫 socket programing 的朋友才能幫忙...

论坛徽章:
0
3 [报告]
发表于 2004-07-16 12:56 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

hotwayd可以把hotmail转成pop3,然后用mozilla收信.programing也想过,只是想先找找现成的工具.

论坛徽章:
0
4 [报告]
发表于 2004-07-16 13:21 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

如果没有root权限,想转发1024以下的服务端口上的信息?
呵呵,这是不是有点hacker的嫌疑啊
shell应该是做不到的。

论坛徽章:
0
5 [报告]
发表于 2004-07-16 23:15 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

自己写了一个程序解决了,  将socket dup2到stdin和stdout上就可以了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-07-16 23:33 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

[quote]原帖由 "yichun"]自己写了一个程序解决了,  将socket dup2到stdin和stdout上就可以了[/quote 发表:

能否分享?

若是不能, 當我沒問....  ^_^

论坛徽章:
0
7 [报告]
发表于 2004-07-16 23:43 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

好像涉及/etc/service这个文件吧

论坛徽章:
0
8 [报告]
发表于 2004-07-17 09:34 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2004-07-17 11:05 |只看该作者

怎样重定向程序的输入和输出到一个本地端口

我用了一个>1024的端口传pop3,只要能收信就可以了. 程序是拼凑出来的,让大家见笑了,重点在do_serve函数上.

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <unistd.h>

  6. int do_serve(int sock_listen, char *cmd_line)
  7. {
  8.     int sock_serve, addr_len;
  9.     struct sockaddr_in client_addr;
  10.     addr_len = sizeof(client_addr);
  11.     sock_serve = accept(sock_listen, (struct sockaddr *) &client_addr, &addr_len);
  12.     if (sock_serve<0) {
  13.         perror("cannot accept connection ");
  14.         return sock_serve;
  15.     }

  16.     printf("\nclient connected\n");
  17.     if (!fork()) {
  18.         /* child */
  19.         int status;
  20.         printf("%d forked, going to exec %s\n", getpid(), cmd_line);
  21.         dup2(sock_serve, STDIN_FILENO);
  22.         dup2(sock_serve, STDOUT_FILENO);
  23.         status = system(cmd_line);
  24.         close(sock_serve);
  25.         exit(status);
  26.     }
  27.     else {
  28.         int status, pid;
  29.         pid = wait(&status);
  30.         printf("%d finished\n", pid);
  31.     }
  32.     close(sock_serve);
  33.     return 0;
  34. }

  35. int main (int argc, char *argv[])
  36. {
  37.     int sock_listen;
  38.     struct sockaddr_in serv_addr;
  39.     int status = 0;
  40.     int port;
  41.     char *cmd_line;

  42.     if (argc < 3) {
  43.         fprintf(stderr, "Usage: %s port cmd_line\n", argv[0]);
  44.         return 1;
  45.     }

  46.     port = atoi(argv[1]);
  47.     cmd_line = argv[2];

  48.     sock_listen = socket(AF_INET, SOCK_STREAM, 0);
  49.     if (sock_listen<0) {
  50.         perror("cannot open socket ");
  51.         return 1;
  52.     }

  53.     serv_addr.sin_family = AF_INET;
  54.     serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  55.     serv_addr.sin_port = htons(port);

  56.     if (bind(sock_listen, (struct sockaddr *) &serv_addr, sizeof(serv_addr))<0) {
  57.         perror("cannot bind port ");
  58.         return 1;
  59.     }

  60.     listen(sock_listen,5);

  61.     printf("server is up at port %d\n", port);
  62.     status = 0;
  63.     while (!status) {
  64.         status = do_serve(sock_listen, cmd_line);
  65.     }
  66.     close(sock_listen);
  67.     return status;
  68. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP