简易someip服务发现SD报文演示

news2024/11/23 18:28:43

环境

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
 

wireshark效果

 

 

sendto.c

 $ cat sendto.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int gsiSockFd = -1;
struct sockaddr_in gstSDTargetAddr = {0};
struct sockaddr_in gstTargetAddr = {0};
struct sockaddr_in gstMyAddr = {0};
unsigned char gucOfferService0001Instance0001[] = {
  0xff, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x30,
  0x00, 0x00, 0x02, 0x35, 0x01, 0x01, 0x02, 0x00,
  0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
  0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x01,
  0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x04, 0x00,
  0xc0, 0xa8, 0x3c, 0x01, 0x00, 0x11, 0x77, 0x25
};

unsigned char gucSdSubAckService0001Instance0001[] = {
  0xff, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x30,
  0x00, 0x00, 0x00, 0x9f, 0x01, 0x01, 0x02, 0x00,
  0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
  //0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
  0x07, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x01,
  0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,
  0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x14, 0x00,
  0xed, 0x3c, 0x00, 0x01, 0x00, 0x11, 0x77, 0x1a
};
unsigned char gucService0001Method8005[] = {0x00, 0x01, 0x80, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x39, 0x01, 0x01, 0x02, 0x00, 0x01};

struct SomeipHead
{
    /* byte 0-3 */
    uint16_t ServiceID;
    uint16_t MethodID;
    /* byte 4-7 */
    uint32_t Length;
    /* byte 8-11 */
    uint16_t ClientID;
    uint16_t SessionID;
    /* byte 12-15 */
    uint8_t SomeipVersion;
    uint8_t InterfaceVersion;
    uint8_t MessageType;
    uint8_t ReturnCode;
    /* byte 16*/
    uint8_t payload[0];
};

void SOMEIP_ShowInfo(const struct SomeipHead *lHead)
{
    printf("\n");
    printf("ServiceID=%04X\n", ntohs(lHead->ServiceID));
    printf("MethodID=%04X\n", ntohs(lHead->MethodID));
    printf("Length=%08X\n", ntohl(lHead->Length));
    printf("ClientID=%04X\n", ntohs(lHead->ClientID));
    printf("SessionID=%04X\n", ntohs(lHead->SessionID));
    printf("SomeipVersion=%04X\n", lHead->SomeipVersion);
    printf("InterfaceVersion=%04X\n", lHead->InterfaceVersion);
    printf("MessageType=%04X\n", lHead->MessageType);
    printf("ReturnCode=%04X\n", lHead->ReturnCode);
    printf("\n");
}

int SOMEIP_SocketInit(void)
{
    int res = -1;

    gstTargetAddr.sin_family          = AF_INET;
    gstTargetAddr.sin_port            = htons(30491);
    gstTargetAddr.sin_addr.s_addr     = inet_addr("127.0.0.1");

    gstSDTargetAddr.sin_family          = AF_INET;
    gstSDTargetAddr.sin_port            = htons(30490);
    gstSDTargetAddr.sin_addr.s_addr     = inet_addr("237.60.0.1");

    gstMyAddr.sin_family          = AF_INET;
    gstMyAddr.sin_port            = htons(30490);
    gstMyAddr.sin_addr.s_addr     = inet_addr("127.0.0.1");

    if((gsiSockFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
    {
        perror("socket");
    }
    else if(bind(gsiSockFd,(struct sockaddr*)&gstMyAddr,sizeof(struct sockaddr)) == -1)
    {
        perror("bind");
    }
    else
    {
        res = 0;
    }

    in_addr_t lstMuticastAddr = inet_addr("127.0.0.1");

    if(setsockopt(gsiSockFd, IPPROTO_IP, IP_MULTICAST_IF,(char *)&lstMuticastAddr, sizeof(lstMuticastAddr)) == -1)
    {
        perror("setsockopt");
    }
    else
    {
        /* keep */
    }

    return res;
}

int main(int argc, char *argv[])
{
    if(SOMEIP_SocketInit())
    {
        /* keep */
    }
    else
    {
        /* offer service */
        sendto(gsiSockFd, &gucOfferService0001Instance0001[0], sizeof(gucOfferService0001Instance0001), 0, (struct sockaddr *)&gstSDTargetAddr, (socklen_t)sizeof(gstSDTargetAddr));
        sleep(1);
        /* subscribe ack */
        sendto(gsiSockFd, &gucSdSubAckService0001Instance0001[0], sizeof(gucSdSubAckService0001Instance0001), 0, (struct sockaddr *)&gstSDTargetAddr, (socklen_t)sizeof(gstSDTargetAddr));
        sleep(1);
        /* connected */
        while(1)
        {
            SOMEIP_ShowInfo(&gucService0001Method8005[0]);
            /* send notification */
            sendto(gsiSockFd, &gucService0001Method8005[0], sizeof(gucService0001Method8005), 0, (struct sockaddr *)&gstTargetAddr, (socklen_t)sizeof(gstTargetAddr));
            sleep(1);
        }
    }
    return 0;
}

<完> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-pythonsum

Pythonsum&#xff1a;优秀的Python算法包介绍 Pythonsum是Python语言的一个优秀的算法包&#xff0c;具有很高的可重用性和性能&#xff0c;支持大规模数据处理和复杂算法实现。本文将为大家介绍Pythonsum的基本功能和优势。 Pythonsum的基本功能 Pythonsum提供了一系列丰富…

华为OD机试真题 Java 实现【对称字符串】【2023Q2 200分】

一、题目描述 对称就是最大的美学&#xff0c;现有一道关于对称字符串的美学。 已知&#xff1a; 第 1 个字符串&#xff1a;R 第 2 个字符串&#xff1a;BR 第 3 个字符串&#xff1a;RBBR 第 4 个字符串&#xff1a;BRRBRBBR 第 5 个字符串&#xff1a;RBBRBRRBBRRBRBBR …

扑克牌大小OJ题

题目链接 扑克牌大小_牛客题霸_牛客网 题目完整代码 #include <iostream> #include<string> #include<algorithm> using namespace std;// left_str 左边牌 // right_str 右边牌// left_count 左边牌数 // right_count 右边牌数// left_first 左边第一个牌…

chatgpt赋能Python-pythonsep怎么用

Python在SEO中的应用 Python一直是广受欢迎的编程语言之一&#xff0c;它拥有强大的功能和易于使用的特性&#xff0c;使得它成为了许多开发人员们的首选。“Pythonsep”是Python在SEO中的应用&#xff0c;它可以帮助用户更好地优化自己的网站&#xff0c;让网站更容易被用户发…

搭建python web环境----Django

第一步&#xff1a;安装Django 1.进入cmd&#xff1a;pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple 2.检测版本&#xff1a; 第二步&#xff1a;配置环境变量 1.查找python安装位置: 2.打开django文件夹中bin文件夹&#xff1a; 查看django的安装位置&am…

火爆CV圈的SAM是什么?

SAM是什么 前言 最近几周&#xff0c;人工智能的圈子里都在讨论SAM&#xff08;Segment Anything Model&#xff09;&#xff0c;一个号称&#xff08;零样本&#xff09;分割一切的图像分割模型。 图&#xff1a;Segment Anything Demo 2023年4月6号&#xff0c;Meta AI发布…

npm install(报错)

1、npm install 报错&#xff08;如图&#xff09; WARN ERESOLVE overriding peer dependency npm WARN While resolving: intervolga/optimize-cssnano-plugin1.0.6 npm WARN Found: webpack3.12.0 npm WARN node_modules/webpack npm WARN peer webpack"^2.0.0 || ^3…

spring源码学习

1.xmlBeanFactory对defaultListableBeanFactory类进行扩展&#xff0c;主要用于从XML文档中获取BeanDefinition&#xff0c;对于注册及获取bean都是使用从父类DefaultListableBeanFactory继承的方法去实现。 xmlBeanFactory 主要是使用reader属性对资源文件进行读取和注册。 2.…

VMware ESXi 6.7 U3 Final - ESXi 6 系列最终版下载

VMware ESXi 6.7 U3 Final - ESXi 6 系列最终版下载 VMware ESXi 6 Standard 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VersionRelease NameRelease …

APIO2023 游记

GDOI 和 GDKOI 的游记都咕咕咕了&#xff0c;而且都炸了&#xff0c;APIO 的游记提前发&#xff0c;就是要破釜沉舟。 我是线上选手。 Day -7 我们原题检测&#xff0c;阿克了&#xff0c;毕竟是原题&#xff0c;虽然有两道博弈论黑题确实挺毒瘤的。 教练让我做 APIO2012 的…

centos8安装mysql8

本次介绍捆绑包rpm方式安装mysql 首先到mysql官网:MySQL 1.下载捆绑包 2.上传至服务器 3.解压 tar -xvf mysql捆绑包.tar 4.重点来了,按照以下顺序分别安装(命令中的版本号按照自己下载的版本调整) rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm rpm -ivh my…

东南亚市场攻略:如何利用海外网红实现品牌曝光与销售增长

在当今数字化时代&#xff0c;社交媒体的兴起改变了品牌推广和市场开发的方式。尤其是在东南亚地区&#xff0c;网红营销迅速发展&#xff0c;成为品牌开发该地市场的重要策略之一。本文Nox聚星将和大家详细探讨出海品牌该如何利用海外网红营销来开发东南亚市场。 ​一、东南亚…

怎么做邮件营销?邮件营销必备攻略

电子邮件营销是与受众沟通、建立关系和推动转化有效的方式之一。然而&#xff0c;撰写有效的电子邮件营销活动需要创造力和方法技巧的结合。做好电子邮件营销能够为企业带来长期的客源&#xff0c;并为其培养稳定优质的客户&#xff0c;为企业带来长期收益。在这篇文章中&#…

这样做WhatsApp群组营销,转化率猛UP

WhatsApp群组营销是一种利用WhatsApp群组进行推广和营销活动的策略。通过创建或参与相关主题的群组&#xff0c;您可以与潜在客户建立联系&#xff0c;传递信息并促进销售。 以下是一些WhatsApp群组营销的建议&#xff1a; 1.确定目标受众&#xff0c;建立目标群组&#xff1a…

2023天一永安杯部分wp

web Query 布尔盲注 import requests import stringdictionary string.digitsstring.ascii_letters"_-{,}" url "http://cd5a2660b462c867.node.nsctf.cn/login.php" xxx"" for i in range(1,666):print("正在爆破第{}位".format…

关闭eslint - vue篇

文章目录 一、问题描述二、问题解决1、首先是比较旧的vue项目2、创建项目的时候&#xff0c;不要选eslint3、如果你使用的编辑软件是webstorm4、创建的项目没有webpack.base.conf.js文件&#xff0c;但是有 .eslintrc.js5、比较新的vue项目&#xff0c;目录没有&#xff08;直接…

升级iOS16.5后无法使用闪电转USB3相机转换器怎么办?

上周&#xff0c;苹果给大家推送了iOS 16.5更新&#xff0c;号称修复了超14个漏洞。但很快&#xff0c;安装了更新的iPhone和iPad用户发现iOS 16.5的一个BUG&#xff0c;Lightning转USB 3相机转换器无法工作。 使用闪电转 USB 3 相机转换器&#xff0c;你可以轻松地将照片和视…

云时通供应链中台 | 打造供应链智慧大脑,实现70%订单交易自动化

在外部环境巨变的三年中&#xff0c;有些消费品制造和零售企业却仍然在自己的赛道逆势增长&#xff0c;这些企业无一例外先一步通过数字化武装自身&#xff0c;打造供应链护城河&#xff0c;为企业实现降本增效。 供应链和物流服务&#xff0c;是商业活动最底层的支撑系统之一…

Postman接口工具、中的全局/环境/集合变量的使用及优先级

变量的使用场景 Postman的变量主要用于参数化和关联 应用1: 常用变量可以按使用范围设置成集合或全局变量应用2: 一套接口要在不同的环境上测试时, 可以新建两个环境,比如test环境和stage环境, 两个环境中添加base_url变量并设置不同的值, 请求中接口的url中使用{{base_url}},…

DJ8-3 shell 进程监控(ps、sleep、kill)

目录 8.6 进程监控 8.6.1 获取进程状态信息&#xff1a;ps 命令 8.6.2 暂停进程运行&#xff1a;sleep 命令 8.6.3 终止进程运行&#xff1a;kill 命令 8.6 进程监控 8.6.1 获取进程状态信息&#xff1a;ps 命令 1、不带参数的 ps 不带参数的 ps 命令运行时&#…