小弟有些问题想要请教一下:
最近在做一个防火墙设备检索OPC流量并做ALG处理的一个项目,因为设备涉及到网络地址转换(NAT),所以IP层的地址会被修改,因为OPC协商时服务器发送的RemoteCreatInstance Response报文中携带了服务器端的地址和端口信息,因为做地址转换所以客户端不能看到服务器的真实网络地址,所以我需要将这个报文中的地址给换掉。现在的问题是如果修改前的地址和修改后的地址长度是一样的,如由1.1.1.1改成了2.2.2.2,那这样连接是没问题的,但如果长度不一样,如由10.10.10.10改成了1.1.1.1,就连不上,总是报参数错误的提示。长度不一样时我也会对应修改NumEntries,securityoffset等这一些涉及到长度和偏移的字段,我用wireshark抓包看到各字段都是对的,但这个response报文发到客户端后,客户端就报错了。不知道是我哪个地方漏改了还是有其他要注意的地方呢?希望大家知道的给个提示。另外好像里面的数据时四字节对齐的,所以我故意让修改前后地址的长度差也四字节的倍数,这样可以暂时忽略对齐问题。我客户端和服务器都是用的Matrikon OPC explorer。
如上图我主要就是修改StringBinding中的NetworkAddr。