![](https://i-blog.csdnimg.cn/direct/1986eaf156314f73a8eef5a71710f819.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
【付费专栏】CAPL实战:以太网
文章平均质量分 54
以实战为线索,逐步深入以太网仿真和测试各个环节,掌握CAPL常用以太网函数思路。打造完整以太网仿真测试流,提升CAPL编程能力和思维能力。
优惠券已抵扣
余额抵扣
还需支付
¥399.90
¥499.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
汽车通信技术
汽车通信技术专家。专注于车载网络诊断以太网测试与网络架构需求开发。涉足:汽车,网络,诊断,以太网,CANoe,SOMEIP,DoIP,TSN,SOA,Python,测试等。独立开发课程《CAPL编程语言系统性课程》《车载以太网通信测试》。
展开
-
CAPL如何实现在网络节点中添加路由Entry
其实不只是CANoe的网络节点,所有设备的应用程序如果要通过Socket套接字发送报文,在网络层都需要根据路由表里配置的路由条目选择发送路径。这个路由条目可以是静态配置,也可以是自动添加。如果CANoe的网络节点添加一个网络接口,配置IP地址和子网掩码:原创 2024-08-22 17:00:36 · 40 阅读 · 0 评论 -
CAPL在创建套接字时不绑定端口号时需要注意的地方
在CAPL中我们使用UdpOpen()和TcpOpen()两个函数创建Socket套接字,传入IP地址和Port口绑定IP地址和Port口,作为发送报文时的源IP地址和源Port口。如果对源IP地址和源Port口没有要求,不需要绑定IP地址和Port口,可以在调用UdpOpen()和TcpOpen()时传入0,如此套接字绑定的IP地址和Port口将随机。原创 2024-08-21 16:54:05 · 28 阅读 · 0 评论 -
如何模拟一个被测件的ARP缓存表存储和更新动态条目的一些脚本编写思路
ARP,地址解析协议,其根本目的是根据对方的IP地址请求对方的MAC地址,填入待发送的报文的目的MAC地址字段中从网卡上发送出去。这不是我们今天要讲的重点!当主机收到ARP请求时,首先要做的并不是回复ARP响应告诉对方自己的MAC地址,而是把ARP请求报文中的源IP和源MAC存入自己的ARP缓存表中作为一条动态条目。这也不是我们今天要讲的重点!我们今天讲的重点是在CANoe中添加的网络节点,如何在CAPL程序中模拟它的ARP缓存表存储和更新动态条目的一些脚本编写思路。目的有如下几点:原创 2024-08-15 18:09:06 · 298 阅读 · 0 评论 -
CAPL使用结构体的方式组装一条DoIP车辆识别请求报文(payload type 0x0003)
payload type为0x0003的车辆识别请求报文携带车辆VIN码,也就是车架号。这是由17个字符组成的字符串。当放入车辆识别请求报文时,需要把字符串转换成ASCII码。原创 2024-08-13 17:36:51 · 184 阅读 · 0 评论 -
CAPL使用结构体的方式组装一条DoIP车辆识别请求报文(payload type 0x0002)
EID是ECU节点的MAC地址,有6个字节,无法用一个整数常量表示,只能用byte数组表示。所以,MAC地址"02:00:00:00:00:52"如何转换成{0x02, 0x00, 0x00, 0x00, 0x00, 0x52}是重点。原创 2024-08-13 16:38:50 · 84 阅读 · 0 评论 -
CAPL使用结构体的方式组装一条DoIP车辆识别请求报文(payload type 0x0001)
用另一个结构体表示车辆识别请求报文,上面表示DoIP头部通用部分的结构体作为它的一个成员。由于车辆识别请求报文没有payload部分,只有通用报头部分,但这并妨碍我们用结构体定义它。原创 2024-08-12 18:02:16 · 68 阅读 · 0 评论 -
CAPL如何组装自定义报文
虽然capl对通用协议(ip/tcp/udp/icmp/someip)提供了接口和函数,用来组装报文,但是对于应用层上的协议,或一些客户自定义的协议,并没有现成的接口和方法来组装它们,所以学会如何自定义组装报文,就显得很重要用capl自带的方法组装一条ICMPv4报文capl提供了一系列的方法来组装和发送报文代码如下:void InternalSendIcmpv4EchoRequest(char senderMacAddress[], .原创 2022-05-08 15:29:49 · 1106 阅读 · 0 评论 -
CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法2)
在文章CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法1)中,我们声明一个结构体DoIPMessage表示完整的DoIP车辆声明消息:原创 2024-08-02 11:15:50 · 505 阅读 · 0 评论 -
CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法1)
如果你参加过我的《CAPL编程系统性课程》,你就结构体类型天然就能表示报文结构,用结构体表示报文虽然麻烦,但灵活度更高。我们今天试着用结构体类型表示DoIP车辆声明消息的DoIP报头,然后组装一条DoIP消息发送出去。原创 2024-07-31 16:50:02 · 212 阅读 · 0 评论 -
CAPL如何实现SOME_IP协议通信:SomeIP_IL.dll函数篇(简单通信)
在文章《CAPL如何实现SOME/IP协议通信:SomeIP_IL.dll函数篇(超两万字详解)》中,我们详细解析了如何通过SOME/IP交互层文件SomeIP_IL.dll和相关函数构建应用层的应用程序端点、服务实例、服务接口等对象,让SOME/IP交互层实现someip消息的收发。 这种方式更贴合SOA面向服务通信的原理,但如果我们只是想简单地给一个被测件发送一条method类型的someip消息,有更简单的方法吗?原创 2024-07-26 22:55:48 · 84 阅读 · 0 评论 -
CAPL如何在底层模拟TCP Server端断开TCP连接
TCP断开连接的四次挥手过程中,Server端需要做的事情是:接收Client端的断开连接请求,发送此断开请求的ACK确认报文,发送Server端的断开连接请求,接收ACK确认报文。原创 2024-07-26 13:24:46 · 40 阅读 · 0 评论 -
CAPL如何在底层模拟TCP Client端断开TCP连接
TCP断开连接的四次挥手过程中,Client端需要做的事情是:发起断开连接请求,接收Server端断开连接请求并响应。如果Client端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:Client不使用TCP/IP协议栈,所以不应该配置TCP/IP协议栈。否则收到Server端的ACK+FIN后协议栈会回复RST。Server端在收到Client的FIN报文后,首先回复ACK确认。Client收到此ACK时需要识别,不做任何反应。此次的CAPL代原创 2024-06-14 18:19:14 · 249 阅读 · 0 评论 -
on ethernetPacket事件函数接收报文时标准的处理流程
on ethernetPacket可以用来接收指定报文,并根据一些判断条件,比如目标MAC地址和IP地址判断报文是否是发给"我"的。比如想通过on ethernetPacket *来接收发送给02:00:00:00:00:17和192.168.0.17的SYN报文。CAPL代码可以这样写:原创 2024-06-12 10:59:27 · 94 阅读 · 0 评论 -
CAPL如何在底层模拟TCP Server端建立TCP连接
TCP连接的三次握手过程中,Server端需要做的事情是:接受连接请求,确认和发起自己的连接,这是通过一条ACK+SYN报文完成的。如果Server端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:原创 2024-06-11 16:12:17 · 423 阅读 · 0 评论 -
CAPL如何在底层模拟TCP Client端建立TCP连接
TCP连接的三次握手过程中,Client端需要做的事情是:发起连接请求,接收Server端的连接请求并确认。 如果Client端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:原创 2024-06-11 15:50:02 · 430 阅读 · 0 评论 -
CAPL如何发送一条SYN报文
在TCP协议中,发起连接的Client端首先会发送一条SYN报文,用来发起TCP连接请求。这条SYN报文的本质是TCP报文,只不过flags字段中SYN位置为1。原创 2024-06-11 14:59:02 · 215 阅读 · 0 评论 -
CAPL如何发送一条UDP报文
UDP作为传输层协议,本身并不具有可靠性传输特点,所以不需要建立连接通道,可以直接发送数据。当然,前提是需要知道对方的通信端点,也就是IP地址和端口号。原创 2024-05-31 18:15:58 · 363 阅读 · 0 评论 -
IP地址在字符串形式、数字形式和byte数组中的转换
ip地址,我们以ipv4为例,字符串形式为:“192.168.0.1”,可以转换成dword类型的数据:原创 2024-05-31 15:33:00 · 221 阅读 · 0 评论 -
CAPL如何发送一条ICMPv4 Echo Reply报文
在实际通信中,我们一般不需要构造ICMPv4回显响应报文,因为它是接收方的ICMPv4协议模块自动回复的。但不代表不能构造。想要构造并发送一条ICMPv4 Echo Reply报文,首先要了解它的报文结构。ICMPv4 Echo Reply报文结构如下:原创 2024-05-07 18:00:00 · 267 阅读 · 0 评论 -
CAPL如何使用socket套接字实现TCP通信(断开连接)
书接上回《CAPL如何使用socket套接字实现TCP通信(数据传输)》,当TCP通信一方数据传输完成后,没有再发送数据的必要时,就可以调用tcpClose()接口主动发起断开连接的请求。原创 2024-03-29 13:27:27 · 313 阅读 · 0 评论 -
CAPL如何使用socket套接字实现TCP通信(数据传输)
书接上回《CAPL如何使用socket套接字实现TCP通信(建立连接)》,当TCP建立连接后,就可以传输数据了。 不管是client还是server,都是使用相同的函数传输应用层数据。原创 2024-03-29 10:48:59 · 661 阅读 · 0 评论 -
CAPL如何使用socket套接字实现TCP通信(建立连接)
socket套接字相关的文章我们已经写过太多,这里就不再展开。CAPL使用socket实现TCP活UDP通信,在文章《【CANoe示例分析】TCP/UDP Server/Client》也有过介绍,但主要介绍的是工程示例,代码分析比较粗略,今天重点介绍下CAPL代码如何实现socket套接字在TCP通信中的使用。 首先TCP通信双方的角色不同,一个是client,一个是server。原创 2024-03-20 17:54:18 · 371 阅读 · 0 评论 -
CAPL组装IPv4分片包的三种思路(3)
把数据手动放入两个分片包报文中的操作还是太蠢了。我们是否能够只需要确定icmpv4 echo reqeust的data部分,剩下的全部用代码实现呢?3、使用CAPL的函数自动生成一条完整的ICMPv4 Echo Request报文,然后把数据自动放入两个分片报文中。再用两个byte数组把它分割成两份存储,作为两个分片包报文的ipv4 payload。原创 2024-03-01 17:58:53 · 90 阅读 · 0 评论 -
CAPL组装IPv4分片包的三种思路(1)
首先定义icmpv4 echo request报文结构的结构体类型,然后声明这个结构体类型的对象icmpv4EchoRequest,这个结构体对象就是一条icmpv4 echo request的报文。DUT回复了pong,说明DUT把收到的两个分片包重组成功,也就说明我们用capl组装的两个分片包是正确的。1、使用结构体类型表示分片包的ipv4 header + payload,然后填充到以太网帧的data中。为什么要把数据放入数组中?再用结构体类型声明两个ipv4的报文,分别表示分片包1和分片包2。原创 2024-03-01 17:52:14 · 89 阅读 · 0 评论 -
CAPL组装IPv4分片包的三种思路(2)
那么ppkt1会根据ipv4头部里的protocol字段值为1,判断payload里的数据是上层协icmpv4的,然后继续解析payload里的数据,发现type是0x08,code是0x00,那么后面2个字节就应该是checksum字段,于是capl自作主张用这第一段数据重新计算了checksum字段,覆盖了0xED和0xE1。很简单,既然除icmp协议层的其他协议层数据都自动计算好了,只有icmpv4里的数据被改变了,重新再把之前的数据填充到ipv4 payload中即可。原创 2024-03-01 17:55:31 · 120 阅读 · 0 评论 -
通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的
假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。原创 2023-07-25 17:40:29 · 840 阅读 · 0 评论 -
通过ethernetPacket对象获取的字段值需要大小端转换吗
在开始正文前,我们先了解一点:当我们在CAPL中使用ethernetPacket关键字声明/定义以太网数据包时,创建的其实是一个ethernetPacket结构体类型的对象,而里面的成员就表示以太网数据包的字段。按照已掌握的知识点,网络上的数据是大端传输,从网络上接收到变量的内存空间时,大端的数据存入低地址位。那么网络上高位的数存入内存空间后,就变成了低位数。这些都不是我们今天的重点,今天的重点是:当我直接访问以太网数据包的字段,赋值给一个变量时,如果字段值超过了1个字节,是如何存入呢?原创 2023-03-13 18:04:41 · 480 阅读 · 0 评论 -
MAC地址在字符串形式、数字形式和byte数组中的转换
mac地址作为网卡的物理地址,有6个byte的长度。在实际表示形式上,以每个字节的16进制,中间用冒号隔开,比如:"01:02:03:04:05:06"。这就是mac地址的字符串形式 而在网络通信传输中,需要对mac地址从字符串形式转换为数字形式或byte数组形式发送。并且网络上传输数据是从大端开始,而操作系统对数据的存储和取出是从小端开始,这就要求我们对mac地址的三种表示形式有所掌握原创 2023-03-09 16:27:48 · 2258 阅读 · 0 评论 -
CAPL如何发送一条ARP Request报文
想要使用CAPL组装并发送一条ARP请求报文,首先要了解ARP Request报文的结构。硬件目的地址hwDestinationAddr应该设置为全0。其他按通信节点实际网络参数设置即可。从Server端给的ARP Response回复可以看出:此报文构造的完全正确。ARP请求报文天然是一条广播报文,所以二层的目的MAC地址需设置为广播MAC。原创 2023-03-07 18:25:42 · 550 阅读 · 0 评论 -
被on ethernetPacket替代的废弃函数:EthReceivePacket
CAPL中有一批被弃用的函数,它们被新的函数代替。虽然是弃用函数,但不代表不能用,只是不用而已。现在最新的CANoe TC8的测试脚本里就有很多弃用函数,还在继续使用。今天来了解接收以太网报文的事件程序(回调函数)原创 2023-03-03 17:12:28 · 810 阅读 · 0 评论 -
如何实现在on ethernetPacket中自动回复ARP response消息
在on ethernetPacket事件函数中,如何对接收到的arp request报文进行自动回复arp response,这是本章要讲的重点内容。首先分解需求:原创 2023-03-03 16:54:03 · 354 阅读 · 0 评论 -
如何获取或设置CANoe以太网网卡信息(SET篇)
CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息原创 2023-03-03 10:57:26 · 887 阅读 · 0 评论 -
如何获取或设置CANoe以太网网卡信息(GET篇)
CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息原创 2023-03-02 18:18:12 · 798 阅读 · 0 评论 -
CAPL如何发送一条ICMPv4 Echo Request报文
想要构造并发送一条ICMPv4 Echo Request报文,首先要了解它的报文结构。ICMPv4 Echo Request报文结构如下:原创 2023-03-01 18:32:16 · 6065 阅读 · 0 评论 -
CAPL如何发送一条ARP Response报文
想要使用CAPL组装并发送一条ARP响应报文,首先要了解ARP Response报文的结构。结构如下:原创 2023-03-01 11:52:28 · 483 阅读 · 0 评论 -
如何根据IP地址判断是IPv4还是IPv6
IPv4地址的书写形式为:"192.168.0.1" IPv6地址的书写形式为:"2001:DB8:85A3:8D3:1319:8A2E:370:7344" 给你一个IP地址,它有三种可能:IPv4、IPv6、既不是IPv4也不是IPv6的无效地址。所以,如果用函数ipGetAddressAsNumber,只能判断是不是ipv4,编写如下函数:原创 2023-02-28 17:25:16 · 4025 阅读 · 0 评论