免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4803 | 回复: 5

[网络] 如何禁止内网间udp广播 [复制链接]

论坛徽章:
0
发表于 2016-06-05 10:53 |显示全部楼层
网络环境是这样的:
              有三个主机A,B,C均运行linux,
              A的ip是192.168.0.11
              B的ip是192.168.0.12
              C是双网卡,两个ip分别是192.168.0.13和10.1.1.111(该ip随便设置的)。
              ABC间可以相互通信,但A,B只能通过C向外发(即10.1.1.X网段)送数据。
需实现:在C上广播,但不期望在A,B收到广播。

请问是不是可以通过在C上作简单的路由配置就可以实现以上目地,还是说在程序上作相应的改动。
C上的广播程序如下:

#include<stdio.h>  
#include<stdlib.h>  
#include<unistd.h>
#include<string.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<sys/wait.h>  
#include<netinet/in.h>  
#include<arpa/inet.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/epoll.h>
#include<pthread.h>

int main()
{
    char msg[128] = "I am broadCast message from server!";  
    int brdcFd;
    int optval = 1;//这个值一定要设置,否则可能导致sendto()失败  
    int sendBytes,len;  
    struct sockaddr_in theirAddr;
   
    if((brdcFd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
    {  
        printf("socket fail\n");  
        return -1;  
    }  

    setsockopt(brdcFd,SOL_SOCKET,SO_BROADCAST | SO_REUSEADDR,&optval,sizeof(int));   
    memset(&theirAddr, 0, sizeof(struct sockaddr_in));  
    theirAddr.sin_family = AF_INET;  
    theirAddr.sin_addr.s_addr = inet_addr("255.255.255.255");  
    theirAddr.sin_port = htons(4001);         

    while(1)  
    {  
        len = strlen(msg);
        sendBytes = sendto(brdcFd,msg,len,0,(struct sockaddr *)&theirAddr,sizeof(struct sockaddr));
        if(-1 == sendBytes)
        {  
            printf("sendto fail, errno=%d\n", errno);  
            return -1;  
        }

        printf("msg=%s, msgLen=%d, sendBytes=%d\n", msg, strlen(msg), sendBytes);
        sleep(3);
    }
    close(brdcFd);

    return 0;  
}  
谢谢各位大神!

论坛徽章:
0
发表于 2016-06-12 16:26 |显示全部楼层
楼主解决了没

论坛徽章:
0
发表于 2016-06-12 16:45 |显示全部楼层
回复 2# txchxl





还没呢,对于网络配置不熟,在学习中,你能提供点帮助或者解决方法吗?


   

论坛徽章:
0
发表于 2016-06-13 11:25 |显示全部楼层
C 主机的192.168.0.x网段不能广播给A/B主机吗? 回复 3# ming_1279


   

论坛徽章:
0
发表于 2016-06-14 14:27 |显示全部楼层
A,B主机可以收到C的广播,但是期望C不要向A,B广播。另外A,B,C其实就是三个嵌入式arm主板,他们之间没有通过路由,是直接相连的。

论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2016-06-15 19:09 |显示全部楼层
从标准的网络定义上,你这种想法不现实。
同网段的广播,同网段的主机都能收到。你是不能决定谁不能接收的。

你要是以10.x.x.x的地址组播则不会被另外两个收到。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP