Как удалить поле "Параметр адреса 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
это мой LAN IP и
y.y.y.y
это мой VPN IP.
Но когда я отправляю свой пакет INIT SCTP, в поддереве блока INIT в журнале Wireshark появляются два необязательных поля, то есть параметр адреса IPv4, как показано ниже. Эти параметры содержат мои 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 (Address: xxxx) (мой IP-адрес в локальной сети) в моем пакете INIT привел к получению пакета ABORT с сервера. Когда я выключаю свой VPN, эти два необязательных поля не отображаются.
Как я могу удалить эти два необязательных поля в Ubuntu после включения моей VPN?
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
}