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

记一个原始套接字不能在同一网段发包的问题

阅读更多
    最近编写一个原始套接字程序,自己构造IP包发送给对方,TCP和IP的校验和都计算正确了。测试的时候发现发送到不同网段成功,但是发送到同一网段却不行。
    发送的代码大约是这样的:
void Send(IP_HEADER* ip)
{
    
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    assert(sock
>0);
    
int nValue = 1;
    setsockopt(sock, IPPROTO_IP, IP_HDRINCL, 
&nValue, sizeof(nValue));
    
struct sockaddr_in addr;
    memset(
&addr, 0sizeof(struct sockaddr_in));
    addr.sin_family 
= AF_INET;
    addr.sin_addr.s_addr 
= ip->SrcIP;
    sendto(sock, (
void*)ip, ntohs(ip->Length), 0,
            (
struct sockaddr *)&addr, sizeof(struct sockaddr_in));
    close(sock);
    sock 
= 0;
}

   后来发现,问题出在发送出去的IP与IP包的IP一致的时候,发送到同一网段就会失败。
    将addr.sin_addr.s_addr = ip->SrcIP;修改成:addr.sin_addr.s_addr = inet_addr("1.1.1.1");后,同一网段也能发送成功了。

    呵呵,看来还没摸到原始套接字的脾气!
分享到:
评论

相关推荐

    判断两个ip号是否在同一网段

    如果有任何一位不相等,就返回`false`,表示不在同一网段。如果所有位都相等,返回`true`,表示在同一网段。 在实际应用中,可能还需要考虑IP地址的有效性、子网掩码的正确性等问题,可以添加额外的验证代码以确保...

    查找与PC不在同一网段的设备

    查找与PC不在同一网段的设备,当我们需要类似的帮助时,该方法会给我们很大帮助

    电脑PC与S7-200SMART PLC不在同一网段,如何建立通信连接?.docx

    解决这个问题的方法是配置多IP地址,使电脑能够在两个不同的网段之间切换。以下是具体操作步骤: 1. **开启网络和Internet设置**:在Windows系统中,可以通过右键点击任务栏右下角的网络图标,然后选择“打开网络和...

    不在同一网段的计算机如何共享打印机电脑问题.pdf

    不在同一网段的计算机如何共享打印机电脑问题.pdf

    如何查看2台设备是否在同一网段

    ### 如何查看两台设备是否在同一网段:深入解析与实践 #### 子网掩码的概念与作用 在探讨如何判断两台设备是否位于同一网段之前,我们首先需要理解子网掩码(subnet mask)的基本概念及其在IP网络中的重要作用。子网...

    IP扫描器,可以扫描出同一网段的所有机器

    描述中提到的“可以扫描出同一网段的所有机器”,意味着IP扫描器工作在子网的范围内,通常是一个CIDR块或网络掩码定义的范围,如192.168.1.0/24。这个过程称为网络探测或端口扫描,它可以帮助网络管理员了解网络的...

    VLAN Mapping实现同一网段不同VLAN的主机通信

    在连接两个VLAN的运营商...由于两个VLAN ID不一致,但是两个VLAN又属于同一个网段。用2台交换机模拟运行商,2台交换机模拟总公司和分公司交换网络,通过配置VLAN Mapping跨运营商网络实现同一网段不同VLAN的主机通信。

    同一网段内Winsock通信程序 VB

    【标题】"同一网段内Winsock通信程序 VB"涉及的核心技术是使用VB6.0中的Winsock控件实现同一局域网内的数据通信。在Windows XP系统环境下,开发这样的程序能够使计算机在同一网络段内交换信息,常用于构建简单的网络...

    shell 判断ip同网段

    shell 判断输入的ip是否和本机的ip同网段 包含两种实现方法

    TIA博途中如何用一块HMI触摸屏同时连接两个不同网段的PLC进行通信?.docx

    若要添加第二个PLC(PLC2),例如IP地址为192.168.1.10,子网掩码同样为255.255.255.0,由于其不在HMI2的同一网段内,所以无法直接通信。 为解决这个问题,我们需要调整子网掩码,扩大IP地址的网络范围。这里,我们...

    两IP是否在同一个网段

    Console.WriteLine("两个IP地址不在同一网段."); } } } ``` 在这个示例中,`AreInSameSubnet`函数接收两个IP地址和一个子网掩码作为参数。它通过逐个比较两个IP地址与子网掩码进行与操作后的结果来判断它们是否...

    同一网段的255号段内的扫描所有IP是否在线工具

    标题中的“同一网段的255号段内的扫描所有IP是否在线工具”指的是一个用于检测局域网内同一子网内255个IP地址是否活动的实用程序。这样的工具通常被网络管理员或者普通用户用来检查网络上的设备连接状态,确保所有...

    C#判断两个ip是否在同一子网内

    在IT领域,网络编程是不可或缺的一部分,而IP地址和子网掩码的处理则是网络编程中的基础。本文将深入探讨如何使用C#语言判断两个IP地址是否处于同一子网内,以及相关的网络概念。 首先,我们需要理解IP地址的结构。...

    不可跨网段与虚拟串口

    "不可跨网段与虚拟串口"这个标题暗示了一个特定的问题,即设备间的通信限制在网络的同一子网内,并且可能涉及到了虚拟串口技术。下面我们将深入探讨这两个核心概念。 首先,我们来理解“不可跨网段”。在TCP/IP协议...

    Javascript 判断两个IP是否在同一网段实例代码

    在探讨如何使用Javascript来判断两个IP地址是否处于同一网段时,我们需要理解IP地址和子网掩码的基础知识,并通过一种有效的算法来实现这一功能。根据提供的文档,我们将详细探讨该过程中的关键知识点。 首先,IP...

    不同网段访问服务器.docx

    本文主要探讨如何在这样的网络环境中实现不同网段间的通信,特别是通过静态路由来解决这一问题。 静态路由是一种手动配置的路由方式,适用于小型网络,因为网络拓扑稳定且改动较少。它允许管理员指定数据包从源到...

    双网卡同网段静态路由

    双网卡同网段静态路由是指在一个主机上安装有两个或更多网络接口卡(NICs),这些网卡可能连接到同一物理网络或不同物理网络中,但它们的IP地址位于同一网段内。这种情况下,主机可以同时作为多个子网的成员,并通过...

    判断两个IP是否属于同一个子网(java)

    判断两个IP是否属于同一个子网(java) 简单代码

Global site tag (gtag.js) - Google Analytics