Как удалить поле параметра адреса IPv4 (необязательно) в пакете SCTP в Ubuntu

Я хочу отправить пакет SCTP на сервер, используя L2TP VPN в Ubuntu 20.04. Для этой цели я настроил 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
    ...

В этом выводе x.x.x.x — это IP-адрес моей локальной сети, а y.y.y.y — IP-адрес VPN.

Но когда я отправляю свой пакет INIT SCTP, два необязательных поля, то есть параметр IPv4-адреса, появляются в поддереве INIT chunk в журнале Wireshark следующим образом. . Эти параметры содержат мои 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

и, наконец, вот отправленные и полученные пакеты:

введите здесь описание изображения

Я думаю, что параметр адреса IPv4 (адрес: x.x.x.x) (IP-адрес моей локальной сети) в моем пакете INIT привел к получению пакета ABORT от сервер. Когда я выключаю VPN, эти два необязательных поля не появляются.

Как я могу удалить эти два необязательных поля в Ubuntu после включения VPN?


person morteza ali ahmadi    schedule 28.10.2020    source источник


Ответы (1)


Чтобы удалить поля параметра адреса IPv4 в пакете SCTP, требуется ручное назначение IP-адреса клиента. Итак, в 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
}
person morteza ali ahmadi    schedule 03.11.2020