如何解决如何在Ubuntu中删除SCTP数据包中的“ IPv4地址参数”字段可选
我想在Ubuntu 20.04中使用L2TP VPN将SCTP数据包发送到服务器。为此,我已经设置了L2TP VPN,并且可以使用ping
命令成功测试连接。现在,我的ifconfig
输出如下:
enp0s31f6: flags=4163<UP,broADCAST,RUNNING,MULTICAST> mtu 1500
inet x.x.x.x netmask 255.255.255.248 broadcast p.p.p.p
...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
...
ppp0: flags=4305<UP,POINTOPOINT,NOARP,MULTICAST> mtu 1400
inet y.y.y.y netmask 255.255.255.255 destination q.q.q.q
...
在此输出中,x.x.x.x
是我的LAN IP,y.y.y.y
是我的VPN IP。
但是,当我发送 INIT SCTP数据包时,两个可选字段,即 IPv4地址参数,出现在Wireshark的 INIT块子树中记录如下。这些参数包含我的IP。
Stream Control Transmission Protocol,Src Port: a (a),Dst Port: b (b)
Source port: a
Destination port: b
Verification tag: 0x00000000
[Association index: 65535]
Checksum: 0x06cf8029 [unverified]
[Checksum Status: Unverified]
INIT chunk (Outbound streams: 3,inbound streams: 3)
Chunk type: INIT (1)
0... .... = Bit: Stop processing of the packet
.0.. .... = Bit: Do not report
Chunk flags: 0x00
Chunk length: 52
Initiate tag: 0xd1d6f19b
Advertised receiver window credit (a_rwnd): 106496
Number of outbound streams: 3
Number of inbound streams: 3
Initial TSN: 1216798565
IPv4 address parameter (Address: x.x.x.x)
IPv4 address parameter (Address: y.y.y.y)
Supported address types parameter (Supported types: IPv4)
ECN parameter
Forward TSN supported parameter
最后,这是发送和接收的数据包:
我认为我的 INIT 数据包中的 IPv4地址参数(地址:xxxx)(我的LAN IP)导致收到了 ABORT 来自服务器的数据包。当我关闭VPN时,这两个可选字段不会出现。
打开VPN后,如何在Ubuntu中删除这两个可选字段?
解决方法
需要手动分配客户端IP才能删除SCTP数据包中的“ IPv4地址参数”字段。因此,C ++需要以下代码:
int sock = socket(AF_INET,SOCK_STREAM,IPPROTO_SCTP);
if(sock < 0)
{
//handle error
}
struct sockaddr_in clientAddr;
memset(&clientAddr,sizeof(struct sockaddr_in));
clientAddr.sin_family = AF_INET;
clientAddr.sin_addr.s_addr = inet_addr("y.y.y.y");
clientAddr.sin_port = htons(a);
if( ::bind(sock,(struct sockaddr*)&clientAddr,sizeof(struct sockaddr)) < 0 )
{
//handle error
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。