Skip to content

Commit

Permalink
rpcap: have the server tell the client its byte order.
Browse files Browse the repository at this point in the history
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.)
  • Loading branch information
guyharris committed Aug 6, 2022
1 parent 26b8f2e commit dc14a7b
Show file tree
Hide file tree
Showing 11 changed files with 673 additions and 490 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Expand Up @@ -1195,6 +1195,7 @@ set(PROJECT_SOURCE_LIST_C
pcap-common.c
pcap-options.c
pcap-usb-linux-common.c
pcap-util.c
pcap.c
savefile.c
sf-pcapng.c
Expand Down
3 changes: 2 additions & 1 deletion Makefile.in
Expand Up @@ -92,7 +92,7 @@ PLATFORM_CXX_SRC = @PLATFORM_CXX_SRC@
MODULE_C_SRC = @MODULE_C_SRC@
REMOTE_C_SRC = @REMOTE_C_SRC@
COMMON_C_SRC = pcap.c gencode.c optimize.c nametoaddr.c etherent.c \
fmtutils.c \
fmtutils.c pcap-util.c \
savefile.c sf-pcap.c sf-pcapng.c pcap-common.c pcap-options.c \
pcap-usb-linux-common.c bpf_image.c bpf_filter.c bpf_dump.c
GENERATED_C_SRC = scanner.c grammar.c
Expand All @@ -114,6 +114,7 @@ PUBHDR = \
pcap.h \
pcap-bpf.h \
pcap-namedb.h \
pcap-util.h \
pcap/bpf.h \
pcap/bluetooth.h \
pcap/can_socketcan.h \
Expand Down

0 comments on commit dc14a7b

Please sign in to comment.