Networking 如何删除“;IPv4地址参数";Ubuntu中SCTP数据包中的字段(可选)

Networking 如何删除“;IPv4地址参数";Ubuntu中SCTP数据包中的字段(可选),networking,ipv4,packet-capture,sctp,transport-layer-protocol,Networking,Ipv4,Packet Capture,Sctp,Transport Layer Protocol,我想使用Ubuntu20.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&l

我想使用Ubuntu20.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,RUNNING,NOARP,MULTICAST>  mtu 1400
        inet y.y.y.y  netmask 255.255.255.255  destination q.q.q.q
    ...
最后,这里是发送和接收的数据包:

我认为我的INIT数据包中的IPv4地址参数(地址:x.x.x.x)(我的LAN IP)导致从服务器接收中止数据包。当我关闭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,0, 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
}
int-sock=socket(AF\u-INET、sock\u-STREAM、IPPROTO\u-SCTP);
if(sock<0)
{
//处理错误
}
clientAddr中的结构sockaddr_;
memset(&clientAddr,0,sizeof(struct sockaddr_in));
clientAddr.sin_family=AF_INET;
clientAddr.sin_addr.s_addr=inet_addr(“y.y.y.y”);
clientAddr.sinu port=htons(a);
if(::bind(sock,(struct sockaddr*)和clientAddr,sizeof(struct sockaddr))<0
{
//处理错误
}
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
if(sock < 0)
{
    //handle error
}
struct sockaddr_in clientAddr;
memset(&clientAddr,0, 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
}