• linux网络route


     

    一、网络基础知识:

    设备端获取的IP路由表

    [root@HKVS /] # route –n

    Kernel IP routing table

    Destination     Gateway        Genmask     Flags  Metric  Ref    Use Iface

    default         192.168.1.1     0.0.0.0         UG    0      0        0 apcli0

    default         192.168.2.254   0.0.0.0         UG    0      0        0 ra0

    10.8.164.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 apcli0

    192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 ra0

    1        route命令参数

     [root@linux ~]# route [-nee]
    [root@linux ~]# route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
    [root@linux ~]# route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
    观察的参数:
       -n  :不要使用通讯协定或主机名称,直接使用 IP 或 port number;
       -ee :使用更详细的资讯来显示
    增加 (add) 与删除 (del) 路由的相关参数:
       -net    :表示后面接的路由为一个网域;
       -host   :表示后面接的为连接到单部主机的路由;
       netmask :与网域有关,可以设定 netmask 决定网域的大小;
       gw      :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
       dev     :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等

     

    格式:route -n
    格式:/sbin/route -n
    用于打印路由表,加上-n参数就是在输出的信息中不打印主机名而直接打印ip地址。

    2     实例

    实例1:显示当前路由

    命令:

    route

    route -n

    实例2:添加网关/设置网关

    命令:route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

    实例3:屏蔽一条路由

    命令:route add -net 224.0.0.0 netmask 240.0.0.0 reject

    实例4:删除路由记录

    命令:

    route del -net 224.0.0.0 netmask 240.0.0.0

    route del -net 224.0.0.0 netmask 240.0.0.0 reject

    实例5:删除和添加设置默认网关

    命令:

    route del default gw 192.168.120.240

    route add default gw 192.168.120.240

    3        相关结构体和定义

    struct rtentry

    {

            unsigned long   rt_pad1;

            struct sockaddr rt_dst;        

            struct sockaddr rt_gateway;    

            struct sockaddr rt_genmask;    

            unsigned short  rt_flags;

            short           rt_pad2;

            unsigned long   rt_pad3;

            void            *rt_pad4;

            short           rt_metric;     

            char            *rt_dev;       

            unsigned long   rt_mtu;        

    #ifndef __KERNEL__

    #define rt_mss  rt_mtu                 

    #endif

            unsigned long   rt_window;     

            unsigned short  rt_irtt;       

    };

    #define RTF_UP          0x0001         

    #define RTF_GATEWAY     0x0002         

    #define RTF_HOST        0x0004         

    #define RTF_REINSTATE   0x0008         

    #define RTF_DYNAMIC     0x0010         

    #define RTF_MODIFIED    0x0020         

    #define RTF_MTU         0x0040         

    #define RTF_MSS         RTF_MTU        

    #define RTF_WINDOW      0x0080         

    #define RTF_IRTT        0x0100         

    #define RTF_REJECT      0x0200

     

    4        对底层内核的控制

    int ioctl( int fd, int request, .../* void *arg */ ) 详解

    第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:

    套接口操作

    文件操作

    接口操作

    ARP 高速缓存操作

    路由表操作

    流系统

    下表列出了网络相关ioctl请求的request 参数以及arg 地址必须指向的数据类型:

                                                                                                                                                             
       

    类别

       
       

    Request

       
       

    说明

       
       

    数据类型

       
       

       

       

       
       

    SIOCATMARK

       

    SIOCSPGRP

       

    SIOCGPGRP

       
       

    是否位于带外标记

       

    设置套接口的进程ID 或进程组ID

       

    获取套接口的进程ID 或进程组ID

       
       

    int

       

    int

       

    int

       
       

       

       
       

    FIONBIO

       

    FIOASYNC

       

    FIONREAD

       

    FIOSETOWN

       

    FIOGETOWN

       
       

    设置/ 清除非阻塞I/O 标志

       

    设置/ 清除信号驱动异步I/O 标志

       

    获取接收缓存区中的字节数

       

    设置文件的进程ID 或进程组ID

       

    获取文件的进程ID 或进程组ID

       
       

    int

       

    int

       

    int

       

    int

       

    int

       
       

       

       
       

    SIOCGIFCONF

       

    SIOCSIFADDR

       

    SIOCGIFADDR

       

    SIOCSIFFLAGS

       

    SIOCGIFFLAGS

       

    SIOCSIFDSTADDR

       

    SIOCGIFDSTADDR

       

    SIOCGIFBRDADDR

       

    SIOCSIFBRDADDR

       

    SIOCGIFNETMASK

       

    SIOCSIFNETMASK

       

    SIOCGIFMETRIC

       

    SIOCSIFMETRIC

       

    SIOCGIFMTU

       

    SIOCxxx

       
       

    获取所有接口的清单

       

    设置接口地址

       

    获取接口地址

       

    设置接口标志

       

    获取接口标志

       

    设置点到点地址

       

    获取点到点地址

       

    获取广播地址

       

    设置广播地址

       

    获取子网掩码

       

    设置子网掩码

       

    获取接口的测度

       

    设置接口的测度

       

    获取接口MTU

       

    (还有很多取决于系统的实现)

       
       

    struct ifconf

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       

    struct ifreq

       
       

    ARP

       
       

    SIOCSARP

       

    SIOCGARP

       

    SIOCDARP

       
       

    创建/ 修改ARP 表项

       

    获取ARP 表项

       

    删除ARP 表项

       
       

    struct arpreq

       

    struct arpreq

       

    struct arpreq

       
       

       

       
       

    SIOCADDRT

       

    SIOCDELRT

       
       

    增加路径

       

    删除路径

       
       

    struct rtentry

       

    struct rtentry

       
       

       
       

    I_xxx

       
       

     

    对于路由操作来说,完成ioctl的函数就是

    int ip_rt_ioctl(unsigned int cmd, void *arg),这个函数会根据传入的cmd是SIOCADDRT,还是SIOCDELRT,来决定是创建一个路由表项,还是删除一个路由表项。

  • 相关阅读:
    正则表达式速查表
    Python第三方库管理Anaconda
    Python3.x和Python2.x的区别
    python 学习 “笨办法学python”(随书补充)
    python 中文输入的注意事项
    mongodb update 字符 操作(补充)
    mongodb update 字符 操作
    04.视频播放器通用架构实践
    05.视频播放器内核切换封装
    03.视频播放器Api说明
  • 原文地址:https://www.cnblogs.com/baiduboy/p/7290114.html
Copyright © 2020-2023  润新知