`
fp_moon
  • 浏览: 977620 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用套接字 ioctl 命令

 
阅读更多

使用 ioctl 套接字控制选项

通常,网络程序需要了解系统中所有有关网络接口和 IP 地址的可用信息。现在,未来的应用程序可以支持 IPv4 和 IPv6 双协议栈。ioctl 结构需要对指针进行遍历和操作,以处理 IPv4 和 IPv6 地址在长度上的差别(除了使用合适的套接字结构 sockaddr_in6 或 sockaddr_storage 之外)。

AIX Version 5.3 提供了很多 ioctl 套接字控制选项,以提取各种有关网络接口的信息。这些 ioctl 命令用于查询接口的状态并对其属性进行操作。下面的部分中包含了一些有用的命令的代码段。有关 ioctl 命令的完整列表,请参见参考资料部分。

ioctl 命令所使用的结构

下面的清单介绍了一些最重要的结构,使用 ioctl 套接字命令时常常用到这些结构。


清单 1. struct ifreq (/usr/include/net/if.h)

				
/* Interface request structure used for socket
 * ioctl's.  All interface ioctl's must have parameter
 * definitions which begin with ifr_name.  The
 * remainder may be interface specific.
 */
struct  ifreq {
#ifndef IFNAMSIZ
#define IFNAMSIZ        16
#endif
        char    ifr_name[IFNAMSIZ]; 
        union {
                struct  sockaddr ifru_addr;
                struct  sockaddr ifru_dstaddr;
                struct  sockaddr ifru_broadaddr;
                __ulong32_t     ifru_flags;
                int     ifru_metric;
                caddr_t ifru_data;
                u_short ifru_site6;
                __ulong32_t   ifru_mtu;
                int     ifru_baudrate;
        } ifr_ifru;

Following macros are provided for convenience

#define ifr_addr        ifr_ifru.ifru_addr      /* address */
#define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
#define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address */
#define ifr_flags       ifr_ifru.ifru_flags     /* flags */
#define ifr_metric      ifr_ifru.ifru_metric    /* metric */
#define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
#define ifr_site6       ifr_ifru.ifru_site6     /* IPv6 site index */
#define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu of interface */
#define ifr_isno        ifr_ifru.ifru_data      /* pointer to if_netopts */
#define ifr_baudrate    ifr_ifru.ifru_baudrate  /* baudrate of interface */
};
      



清单 2. struct ifconf (/usr/include/net/if.h)

				
/*
 * Structure used in SIOCGIFCONF request.
 * Used to retrieve interface configuration
 * for machine (useful for programs which
 * must know all networks accessible).
 */
struct  ifconf {
        int     ifc_len;                /* size of associated buffer */
        union {
                caddr_t ifcu_buf;
                struct  ifreq *ifcu_req;
        } ifc_ifcu;

Following macros are provided for convenience

#define ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
#define ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
};
      

 

详细内容:http://www.ibm.com/developerworks/cn/aix/library/au-ioctl-socket.html#resources

分享到:
评论

相关推荐

    VC 异步套接字发送命令 接受数据.rar

    7. **发送命令**:使用`send`函数向连接的套接字发送数据。在异步模式下,如果缓冲区已满,`send`可能不会立即发送所有数据,但不会阻塞。 8. **接收数据**:异步接收数据通常涉及注册一个套接字的`FD_READ`事件,...

    Windows网络编程技术_套接字选项和IO控制命令(资料+源码)

    本书专门讨论Windows网络编程技术。...IPX选项级别 2279.2 IOCTLSOCKET和WSAIOCTL 2319.2.1 标准I/O控制命令 2329.2.2 其他I/O控制命令 2339.2.3 安全套接字层的I/O控制命令 2399.2.4 ATM I/O控制命令 2419.3 小结 242

    信息安全上机实验 raw socket原始套接字编程 局域网监听

    1. **创建原始套接字**:使用`socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))`创建一个原始套接字,参数`PF_PACKET`指定使用数据链路层协议,`SOCK_RAW`表示创建的是原始套接字。 2. **设置混杂模式**:通过`ioctl...

    linux系统ioctl使用示例.pdf

    程序首先打开一个套接字,然后通过`ioctl()`调用`SIOCETHTOOL`命令,传递一个包含`ethtool_cmd`结构体的`ifreq`结构体,来获取以太网卡的物理层信息。通过检查`ethtool_cmd`中的`speed`和`duplex`字段,可以判断接口...

    linux ioctl.docx

    1. **SIOCATMARK**: 这个命令用于检查套接字是否处于带外数据(Out-of-Band Data,OOB)标记状态。如果套接字有未读的带外数据,`ioctl`返回非零值,否则返回0。 2. **SIOCGPGRP/SIOCSPGRPN, SIOCSPGRP**: 这些命令...

    ubuntu18.04 在QT下调用V4L2的ioctl函数来实现采集视频流 把采集到的视频流在控件上显示出来 同时采集两个相机

    对字符设备、块设备、及套接字,非常方便扩充新的命令)。 QT版本(qt-opensource-linux-x64-5.13.2)。 使用了QT的线程, 相机的整个采图过程在子线程中进行,可以避免卡住主线程。 并且把抓到的图转为QImage对象,...

    Winsocket入门教程二:非阻塞式服务器和客户端程序TCP.doc

    在使用 select 函数时,我们需要将相应的套接字加入到相应的集合中。如果集合中的套接字有信号,select 函数的返回值即为集合中有信号的套接字数量。 我们可以使用以下几个宏来操作 fd_set 集合: * FD_SET(s, *...

    Linux网卡的读写编程

    1. **套接字编程**:理解套接字的概念,创建和使用数据报套接字。 2. **I/O控制**:`ioctl()`函数的使用,以及不同ioctl命令的含义。 3. **网络接口结构体**:`ifreq`和`sockaddr_in`结构体的使用,以及它们在获取...

    linux网络编程(入门篇)

    - 在Linux中,不同的套接字类型使用不同的地址结构,例如AF_INET类型使用`sockaddr_in`结构体来存储地址信息。 **1.3 网络字节序** - **1.3.0 大端与小端对齐问题** - 计算机存储数据时有两种字节序:大端模式...

    非阻塞recvfrom的设置

    ### 非阻塞recvfrom的设置 #### Ioctlsocket() 函数详解 **Ioctlsocket()** 是Windows ...通过对`ioctlsocket()`函数的恰当使用以及对`recvfrom()`函数返回值的正确处理,你可以有效地管理非阻塞套接字上的数据传输。

    Winsocket入门教程二:非阻塞式服务器和客户端程序(TCP).doc

    `ioctlsocket(s, FIONBIO, argp)`这里的`s`是套接字句柄,`FIONBIO`是命令常量,用于设置非阻塞模式,`argp`传入的值如果是1,则设置为非阻塞,0则恢复为阻塞。 接着,`select`函数在非阻塞模式中扮演关键角色。`...

    linux网络编程中遇到的ioctl中的标志.pdf

    这些命令码以`SIOC`(Socket I/O Control)开头,表示它们与套接字操作有关。 在描述的博客文章中提到了`struct sockaddr_in`,这是用于存储IPv4地址的结构体。它包含以下字段: - `sin_family`:地址族,通常设置...

    第5章 互联网广播和IP多播

    另外,`ioctlsocket`函数用于对套接字的I/O行为进行控制,比如查询未决I/O的状态。而在Winsock 2中引入的`WSAIoctl`函数扩展了更多的控制代码,提供了更多功能,如设置异步I/O、检查TCP连接状态等。`WSAIoctl`接受一...

    hci_sock.rar_HCI_linux hci

    4. **HCI命令发送**:开发者可以使用HCI套接字发送命令到蓝牙控制器,如读取设备信息、设置连接参数、发起配对等。 5. **HCI数据传输**:源码会涉及如何通过HCI套接字发送和接收ACL数据包,实现蓝牙的数据传输。 6...

    run-shell with unix socket

    标题 "run-shell with unix socket" 描述的是在Unix系统中使用Unix域套接字(socket)来执行shell命令。Unix域套接字是进程间通信(IPC, Inter-Process Communication)的一种方式,它允许同一台机器上的进程之间进行...

    基于Linux_C实现的网卡抓包程序

    使用原始套接字虽然可以捕获网络层以下的数据包,但需要管理员权限,因为这种操作有可能影响到系统的安全和稳定性。因此,在Linux中运行程序时可能需要使用sudo命令。 对于网络抓包程序来说,了解网络协议栈的结构...

    bp_ioctl.rar_PF-BP_family

    4. **IPv6的Linux API**:如何使用socket API创建、绑定和连接IPv6套接字,以及设置IPv6选项。 5. **IPv6内核实现**:内核如何处理IPv6的数据包,包括路由、错误处理、连接状态管理等。 6. **ioctl操作**:理解bp_...

Global site tag (gtag.js) - Google Analytics