linux netlink套接字实现相似ss命令 ,统计套接字以及TCP信息
2024-08-27 21:06:44
參考了 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
最新文章
- 基于spring+quartz的分布式定时任务框架
- centos 搭建git服务器
- 不用ide编译java程序时调用jar包
- Windows 10 技术预览
- javascript 中string 型数据转换成int类型
- EF Code First DataAnnotations
- lintcode:买卖股票的最佳时机 III
- 设置N秒后执行某个方法或函数
- LeetCode 面试:Add Two Numbers
- bzoj2534: Uva10829L-gap字符串
- JSONObject和JSONArray的简单使用(json-lib)
- iOS基础 - UIButton - UIImageView
- Light OJ 1006 - Hex-a-bonacci
- Ubuntu下永久修改主机名和创建用户
- C++的默认构造函数
- Quartz应用与集群原理分析
- [grub2] grub2修改启动顺序
- VS Code插件
- python----函数与函数式编程
- 使用py2exe转换python文件为可执行程序