pcap を使用して rtp 構造体を宣言し、パケットのこの領域を指定しようとすると、宣言によっては異なる方法で動作することがわかりました。
私はこれを書きました:
struct udphdr *udp;
struct rtphdr *rtp, *rtp2;
udp = (struct udphdr*) (packet + sizeof(struct ether_header) + (ip->ip_hl*4));
rtp = (struct rtphdr*) (packet + sizeof(struct ether_header) + (ip->ip_hl*4) + sizeof(struct udphdr));
rtp2 = (struct rtphdr*) (udp + sizeof(struct udphdr));
printf("UPD header: %p\n",udp);
printf("RTP header 1: %p\n",rtp);
printf("RTP header 2: %p\n",rtp2);
出力は次のとおりです。
UDP ヘッダー: 0x7fcea3802222
RTP ヘッダー 1: 0x7fcea380222a
RTP ヘッダー 2: 0x7fcea3802262
なぜ最初の宣言では、UDP ヘッダーの 8 バイト (0x2a - 0x22 = 0x8) が追加され、他の宣言ではさらに多くなります。
ありがとう