zoukankan      html  css  js  c++  java
  • linux netlink套接字实现相似ss命令 ,统计套接字以及TCP信息

    參考了 ss的源码

    以及 netlink相关资料:http://blog.csdn.net/scdxmoe/article/details/27711205


    实现结果为:

    gcc netlink_dig_530_7.c -o netlink_dig_530_7
    ./netlink_dig_530_7

    state      family     l.addr     l.port       r.addr     r.rport   
    LISTEN     AF_INET   localhost      53         0.0.0.0        0         
    LISTEN     AF_INET   (null)         21         0.0.0.0        0         
    LISTEN     AF_INET   (null)         22         0.0.0.0        0         
    LISTEN     AF_INET   (null)         22         0.0.0.0        0         
    LISTEN     AF_INET   localhost      631        0.0.0.0        0         
    LISTEN     AF_INET   (null)         12865      0.0.0.0        0         
    ESTAB      AF_INET   ubuntu.local   59208      91.189.89.134  80        
    ESTAB      AF_INET   ubuntu.local   22         192.168.0.248  9689      
    ESTAB      AF_INET   ubuntu.local   22         192.168.0.248  9295      
    ESTAB      AF_INET   ubuntu.local   35531      91.189.94.25   80        
    ESTAB      AF_INET   ubuntu.local   22         192.168.0.248  9691  

    本文的实验 并没有实现怎么样获取TCP的窗体值cwnd和RTT值,在ss源代码中我看到了他利用了/proc

    文件来实现获取窗体和RTT值。怎么样用netlink套接字实现呢?还请教各位指点

    源码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <string.h>
    #include <asm/types.h>
    #include <sys/socket.h>
    #include <linux/netlink.h>
    #include <linux/inet_diag.h>
    #include <netinet/tcp.h>
    #include <netdb.h>
    #include<arpa/inet.h>
    struct sk_req {
        struct nlmsghdr nlh;
        struct inet_diag_req r;
    };
    
    
    typedef struct{
     __u8 family;
     __u8 bytelen;
     __s16 bitlen;
     __u32 flags;
     __u32 data[8];
    } inet_prefix;
    
    /*struct namerec
    {
            struct namerec *next;
            const char *name;
            inet_prefix addr;
    };*/
    
    struct tcpstat
    {
            inet_prefix
    
  • 相关阅读:
    [编程题-网易]小易的升级之路
    [腾讯编程题]微信红包
    [编程题]生成格雷码
    [编程题]二叉树-网易
    安装wepack
    css选择器
    宽和高
    配置环境变量
    offsetLeft在各浏览器的值
    容易忘记的css属性和动画属性
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7146269.html
Copyright © 2011-2022 走看看