免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: wantaugust
打印 上一主题 下一主题

[内核入门] 自己设想3种比较端口和pid的关系方法,不是bashshell,请大家帮帮 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2014-08-01 20:15 |只看该作者
回复 20# Godbach


    xiexie正在看

论坛徽章:
0
22 [报告]
发表于 2014-08-02 13:31 |只看该作者
回复 20# Godbach

大神,我看了文档了,明白了,但是我这个初学者写的代码效率太底,你帮着写个例子好吗

这个是我cat /proc/2311/net/tcp的部分数据:
  22: CA00A8C0:B39F 15C80E79:0050 08 00000000:00000001 00:00000000 00000000     0        0 171424 1 ffff880090bc1500 28 4 0 10 -1                    
  23: CA00A8C0:C777 776425B9:0050 08 00000000:00000001 00:00000000 00000000     0        0 171422 1 ffff880130abb100 86 4 16 10 -1                  
  24: CA00A8C0:9F81 05AA2305:0050 08 00000000:00000001 00:00000000 00000000     0        0 380784 1 ffff880130b6e900 113 4 0 10 -1   
我把每一行都读到buf中,然后本地的端口号,如第一行的B39F都转成int型
这是我的部分代码:
    int tcp_port;
    char temp[4];

     file=fopen("/proc/2344/net/tcp","r");
     fgets(buf,1024,file);
//我是在下面的while中,将端口号转乘int
    while(fgets(buf,1024,file)!=NULL)
    {   printf("%s",buf);
        printf("               ");
        int i=15;
        for(i;i<19;i++)
            printf("%c",buf);
        printf("\n");

        temp[0]=buf[15];
        temp[1]=buf[16];
        temp[2]=buf[17];
        temp[3]=buf[18];
        printf("    %s    \n",temp);
        sscanf(temp,"%x",&tcp_port);
        printf("  int:%x\n",tcp_port);
    }
每个output包都要调用这个程序,我写的while中的语句占用资源太多cup,io都太高,我的机器有点负担不起这个防火墙,清大神给写个占用资源少的例子程序,谢谢
另外还一个问题,我是用fopen返回文件指针,或者open返回文件描述符,那种效率高?谢谢
   

论坛徽章:
0
23 [报告]
发表于 2014-08-10 14:15 |只看该作者
回复 10# wantaugust


   
谢谢前辈,问题解决了
我一怒之下格了硬盘,傻了,应该格的是分区,快一个星期了才把数据恢复过来,花了我500大洋,

重装系统后发现问题解决了,再也没有什么整数转换的问题了,但是其他问题还是那样,
用codeblocks就提示错误,像你一样在终端玩,结果就正确了。本人小白不知道codeblocks中的厉害

论坛徽章:
0
24 [报告]
发表于 2014-08-10 19:02 |只看该作者
楼上发错地方了 和和

论坛徽章:
0
25 [报告]
发表于 2014-08-17 16:47 |只看该作者
回复 20# Godbach


    大神我8月2号防火墙成功了,就是22楼,那个时候每一个/proc/$pid/net/tcp的内容都是对应的pid网络信息
比如/proc/3333/net/tcp里是pid3333的信息,/proc/4444/net/tcp里是pid4444的信息,他们都给不相同,都
表示这个pid的占用的来源ip端口和发送的目的ip端口

    但是重装系统并且升级后(好像规格变了),现在每一个/proc/$pid/net/tcp里的内容都一样
比如/proc/3333/net/tcp里是pid3333的信息,/proc/4444/net/tcp里是pid4444的信息

    我拿到一个output的tcp包后,没法通过来源地址判断这个包是那个pid发送出去的,我迷茫了,请您帮着看看,谢谢
    祥见这里:http://bbs.chinaunix.net/thread-4150643-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP