Linux环境下服务器利用组播来获取客户端IP

本文介绍了在Linux环境下,服务器如何利用组播技术来获取客户端IP。内容涉及组播的概念、组播地址分类,以及如何获取本机IP地址。通过组播编程的基本步骤,包括接收端和发送端的实现,展示了如何在C/C++中实现组播通信。
摘要由CSDN通过智能技术生成

Linux环境下服务器利用组播来获取客户端IP

单播是两个主机之间端对端通信(比如TCP、UDP通信),而广播用于一个主机对整个局域网中所有主机的通信。单播和广播是两个极端,要么对一个主机通信,要么对局域网内所有主机通信。然而在实际情况下,比如要获取局域网内获取执行特殊任务主机IP,单播显然不适用,因为单播必须首先要知道通信两端的IP,而使用广播显得浪费资源。在这种需要对局域网下一组特定的主机进行通信的情况下,就用到了组播。 本文针对以上情况,从组播概念、组播编程和本机IP地址获取三个方面展开阐述。

什么是组播?

组播就是将网络中同一业务类型的主机进行逻辑上的分组,进行数据收发的时候,数据仅仅仅仅在同一分组内进行,没有加入分组的主机不能收发对应的数据。
说的更通俗一点,主机好比你qq中的联系人,组播组就好比你新建的讨论组,只有加入讨论组的成员才能接受发送消息。

组播地址

说起组播地址就不得不说一下IP地址的分类。IP地址共分为五类,分别是A类、B类、C类、D类和E类。五类不同的IP地址。

5类IP地址:

类别 固定最高位 网络位 第一字节范围
A 0 8 0~127
B 10 16 128~191
C 110 24 192~223
D 1110 组播地址 224~239
E 11110 预留 240~255

D类的IP地址就是组播IP地址。其中,组播IP地址又分为局部组播地址、预留组播地址和管理权限组播地址。

  • 局部组播地址:在224.0.0.0~224.0.0.255之间,这个区间的地址视为路由协议和其他用途保留的地址,路由器并不妆发范围的IP包。
  • 预留组播地址:在224.0.1.0~238.255.255.255之间,可用于路由协议。
  • 管理权限组播地址:在239.0.0.0~239.255.255.255之间,类似于私有地址,不能用于网络。

获取本机IP地址

主要用到了ioctl 函数(设备控制接口)来从网卡中获取IP信息和主机信息。顾名思义,ioctl函数就是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:

int ioctl(int fd, ind cmd, …); 

其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。
ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数来控制设备的I/O通道。
获取本机IP地址和主机名的完整代码如下:

#define ETH_NAME "eth"

void getIPHost(char** iphost)
{
    int sock;
    struct sockaddr_in   sin;
    struct ifreq   ifr;

    sock  = socket(AF_INET, SOCK_DGRAM, 0);
    for(int i = 0; i < 10; i++)
    {
        char* ENAME = (char*)malloc(5*sizeof(char));
        bzero(ENAME, 5);
        sprintf(ENAME, "%s%d", ETH_NAME, i);
        strncpy(ifr.ifr_name,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值