diff options
author | Guy Harris <gharris@sonic.net> | 2022-08-06 04:00:43 -0700 |
---|---|---|
committer | Guy Harris <gharris@sonic.net> | 2022-08-06 04:00:43 -0700 |
commit | dc14a7babca1471809bee6872539ff836937840e (patch) | |
tree | 509a5c102eeb6b9f459c355dd022a5d7a7645a36 /sf-pcap.c | |
parent | 26b8f2e55c25a0c6a1e17d2e9590063224890d6a (diff) |
rpcap: have the server tell the client its byte order.
Stick a byte-order magic number, in the host byte order of the server,
into the authentication reply.
If the authentication reply is large enough to contain that magic
number, extract it and, from it, determine whether the server's byte
order is the opposite of the client's byte order; if it's not present,
assume the server has the same byte order.
If the two byte orders are differen, do the same byte-order fixing of
the packet contents that we do when reading a pcap file or pcapng
section with the opposite byte order, so that host-byte-order fields are
converted from the byte order of the host that sent or wrote them to the
byte order of the host that received or read them.
This change will allow a client to work with all servers, regardless of
whether they provide the byte order or not, although if the server
doesn't provide the byte order, and it happens to be the opposite of the
client's byte order, packets with a link-layer header type that contains
host-byte-order fields will not be able to be processed correctly. It
also allows clients that don't handle the byte order magic number in the
authentication reply to work with all servers, as they will just discard
what they consider extra data at the end of the reply.
(Note: fixing the byte order in the server requires that the client send
a byte order indication to the server, so *either* fix works only
between an updated client and an updated server. We already have
optional data in the authentication reply, to allow updated servers and
clients to negotiate a protocol version while still allowing updated
clients to work with older servers and older clients to work with
updated servers, so this just continues that mechanism.)
Diffstat (limited to 'sf-pcap.c')
-rw-r--r-- | sf-pcap.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -46,6 +46,7 @@ #include <limits.h> /* for INT_MAX */ #include "pcap-int.h" +#include "pcap-util.h" #include "pcap-common.h" @@ -705,10 +706,7 @@ pcap_next_packet(pcap_t *p, struct pcap_pkthdr *hdr, u_char **data) } *data = p->buffer; - if (p->swapped) - swap_pseudo_headers(p->linktype, hdr, *data); - - fixup_pcap_pkthdr(p->linktype, hdr, *data); + pcap_post_process(p->linktype, p->swapped, hdr, *data); return (1); } |