Commit Graph

84911 Commits

Author SHA1 Message Date
John Thacker 13df9b0b64 HTTP: Speed up chunked Transfer-Encoding on TCP
HTTP/1.1 chunked Transfer-Encoding doesn't have a overall length,
but requires scanning through variable length chunks to find the
end. If we determine that additional segments are needed, and
we have a sequence number (or other identifier) for the message,
store the position of the last chunk size found.

Use this to start scanning at that same offset when the next
segment arrives, reducing the algorithm for determining if
when we have the complete chunked message from O(N^2) to O(N),
which can be significant on captures with many chunks.

This does most of #14382, reducing the length of time to process
a file with 2 pass tshark from over 8.5 secs to under 3 seconds
on my machine. There is still some O(N^2) contribution from the
reassembly code itself with many small fragments (see #17311).

Other dissectors need some small changes to enable this for
HTTP over other transport layers. (TLS would be fairly easy and
is the other important case.)
2022-08-10 05:31:36 +00:00
John Thacker 5e04463282 L2TP: Store cookie length, session IDs, and PW type from Cisco AVPs
Store the cookie length, session IDs, and pseudowire type when
they are carried in Cisco vendor-specific AVPs in the same way
as done with the IETF AVPs. More of #16565.
2022-08-10 05:06:16 +00:00
Tomasz Moń 7316b16e1d
extcap: Read stdout and stderr during capture
Read extcap stdout/stderr data when available to prevent extcap hang on
stdout/stderr write. Discard stdout data as it was not used earlier.
Store up to 1024 bytes of stderr and display it to user after capture
stops.

Fixes #17827
2022-08-10 06:18:25 +02:00
Tomasz Moń ac4e1b86b8
wsutil: Use GIOChannel for standard pipes
Remove ws_read_string_from_pipe() as this function encourages bad design
and is no longer necessary. Extcap stderr is read only after the child
process has finished and thus the read will never block.

Close process information thread handle right away as we don't use it.
Remove unused ws_pipe_t member variables.
2022-08-10 06:18:25 +02:00
Tomasz Moń c1861ad1cc
extcap: Close capture session after extcap finishes
Wait up to 30 seconds for extcap process to finish after closing pipes.
The wait is achieved in non-blocking fashion, i.e. the UI is completely
responsive during the wait. Only actions related to capture process like
capture control, file open, save, export are inactive during the wait.

On Windows extcap child watch callback gets called immediately as the
process is forcefully terminated. Prior to this change the extcap was
forcefully terminated on Windows anyway.

The wait is possible on UNIX systems if extcap does handle SIGPIPE and
SIGTERM signals. The defaults handlers for SIGPIPE and SIGTERM simply
terminate the process so for large number of extcaps there is no change.
If extcap does not finish within 30 seconds, it is forcefully terminated
using SIGKILL signal.
2022-08-10 06:18:15 +02:00
John Thacker 86c6509cf3 L2TP: Don't report Malformed Packet on ZLB messages
Don't have things that substantively affect dissection depend
on whether the tree is present or not. (It's not really necessary
to do all these checks anyway since items are faked.)

Prevents adding "[Malformed Packet]" to the Info column for all
Zero Length Body messages. One of the things mentioned in
issue #16565 (that patch was lost with Gerrit.)
2022-08-09 20:43:52 -04:00
John Thacker 787ecb7f1d file-jpeg: Reduce expert info to PI_PROTOCOL for Exif
Change the expert info for Exif files that have Exif instead
of JFIF in their first identifier fields from a PI_MALFORMED
to PI_PROTOCOL. It's not the correct protocol spec, but it's
common in Exif files and it doesn't make the dissector give up,
so PI_PROTOCOL is more appropriate.
2022-08-09 19:37:03 -04:00
John Thacker 678fba2bc9 TURN: Don't report bogus PDU lengths
Since STUN and TURN (and DLTS, RTCP) are multiplexed togther,
using the non-heuristic TURN dissector with Decode As is not
usually the correct choice. However, if we're doing that, and
the packet doesn't look like a TURN packet, don't give a bogus
PDU length to the TCP dissector but instead take until the end
of the packet. Fix #16756
2022-08-09 23:03:40 +00:00
David Perry 8528f96ea4 Name `proto_nfs_unknown` as "Unknown NFS" 2022-08-09 19:42:55 +00:00
David Perry 43d499ca45 Use `register_dissector()` for more protocols 2022-08-09 18:50:08 +00:00
John Thacker 33a34aeec1 stun: Add some comments
Update the attributes to include four Google undocumented attributes
in the IANA registry. Add a comment about the Unassigned value that
was Data Indication in the TURN draft, and note that MS-TURN still
mentions it and some captures use it.
2022-08-09 07:42:05 -04:00
Chuck Craft ebb68e0b23 KINK: change default to IANA port 910 (RFC 4430)
Looks like the dissector was added with a draft of protocol before
the port was assigned - "KINK uses UDP on port [XXX -- TBA by IANA]"
2022-08-09 08:37:47 +00:00
Joakim Karlsson 318b969d1d GRE: forward GRE key to encapsulated data 2022-08-09 09:52:09 +02:00
John Thacker 203cd2cba9 prefs: More cleanup, auto prefs
Remove callback function from pref registrations for dissectors that
don't need a callback. In other dissectors, move registration that
only needs to be done once inside the check for initialization,
avoiding some console messages when preferences are changed
("Duplicate dissectors (anonymous) and (anonymous) for protocol...")
and the like.

Add a couple auto preferences for dissectors missed in previous waves.

Ping #14319
2022-08-09 06:21:05 +00:00
John Thacker 862803de5c HTTP2: Send headers to the follow tap after decompression
Field blocks (carried in HEADERS, PUSH_PROMISE, and CONTINUATION
frames) are compressed by HPACK. Send them to the follow tap only
after decompression. Update the tests to match the new output.

Ping #18239 (There's still the case of gzip and brotli compressed
DATA frames to handle).
2022-08-08 23:50:20 +00:00
Jaap Keuter 8097d3e4a3 Streamline hfinfo retrieval in proto_tree_add_* functions
Instead of a function call, instantiate the PROTO_REGISTRAR_GET_NTH
macro directly, which contains the subsequent DISSECTOR_ASSERT macro
to test the result anyway.
2022-08-08 17:05:50 +00:00
Gerald Combs 95069d8f78 Docs: Clean up some Python references.
Make sure we captitalize Python and use its HTTPS URL.
2022-08-08 16:34:45 +00:00
Pascal Quantin 4e85e0bfbe GSM CBSP: fix dissection of Repetition Period IE
Closes #18254
2022-08-08 13:21:35 +00:00
Chuck Craft a6813db329 Qt: traffic tables - tcp/udp port name resolution
Allow conversation/endpoint tabs that include IP address and
port number to resolve either or both. Currently IP address
(network) resolution is required to resolve tcp/udp ports.
2022-08-08 09:10:10 +00:00
Daniël van Eeden 728edc0d1f mysql: actually uncompress compresed packets
* Only for zlib/deflate compressed packets
* Not (yet) dissecting the payload
2022-08-08 08:28:04 +00:00
Gerald Combs dc24cdfc4b Qt: Add an "x-reset" icon and use to reset extcap options.
Add an "x-reset" stock icon and use it instead of Qt's SP_BrowserReload
icon to reset extcap options.
2022-08-07 20:21:12 +00:00
Gerald Combs 2e7a61a2c1 Docs: Update the extcap section of the Developer's Guide.
Make some variable names lower case to match their usage. Update various
parts of the text.
2022-08-07 18:49:43 +00:00
Gerald Combs a7be80b04a [Automatic update for 2022-08-07]
Update manuf, services enterprise numbers, translations, and other items.
2022-08-07 16:38:23 +00:00
DarienSpencer65 66b264559c UMTS FP: Fix flag in conversation_new calls 2022-08-07 07:09:12 +00:00
John Thacker 2347345eec prefs: More port prefs to auto prefs with ranges
Move the rest of the SCTP port preferences to auto prefs
with ranges. Ping #14319.
2022-08-06 18:51:07 -04:00
Uli Heilmeier f9cf0a0ae7 BGP: Check nhlen
Only call tvb_bytes_to_str() when nhlen > 0

Fixes: #18248
2022-08-06 20:42:15 +00:00
Jaap Keuter da5603a0d0 extcap: implement saving and restoring radio button setting 2022-08-06 20:19:04 +00:00
John Thacker 6fd212926a epan: Constify a few range functions 2022-08-06 08:26:40 -04:00
John Thacker 057436ff81 Prefs: Convert some SCTP port preferences to auto prefs
Convert SCTP port preferences in dissectors starting m-z.
Preferences that were already the name of the table can just
be removed from the dissector and they will migrate. Preferences
with a different name are added to deprecated_port_prefs in
epan/prefs.c (Since that function handles them there is no
need to mark them as obsolete.)

Also change a few TCP and UDP single ports reigstered with
preferences and callbacks that used the sample dissector as
a template.

Uses more auto preferences, makes more port preferences ranges,
and reduces the number of preference callbacks. Ping #14319
2022-08-06 00:17:14 -04:00
John Thacker 9cfd989abf prefs: A few more range conversions
A few more protocols that have callbacks to retrieve auto preferences
for request/response determination.  Convert them to getting ranges,
since all these are ranges now. Ping #14319
2022-08-05 22:23:43 -04:00
John Thacker 41791cad7b ipsec: Fix ESP NULL pad check
Correctly break out of the loop
2022-08-05 21:27:23 -04:00
Hadar Shoham b87e7aea49 Add support for DOCSIS TLV 5.76 'Low Latency Support' 2022-08-05 12:56:57 +00:00
John Thacker e43c6b1aa2 quake2, quakeworld: Get ports as ranges
quake2 and quakeworld get the port list to use to determine
client/server. Get that as a range now. Ping #14319.
2022-08-05 08:04:43 -04:00
John Thacker 0aed38cf97 ipsec: Improve ESP NULL autodetection
Improve the ESP NULL autodetection, and get it closer to the
heuristics in RFC 5879:

Detect multiple ICV lengths - 12, 16, 24, and 32
Check padding length validity
Check padding values
Reject if the subdissector rejects the packet

Still does not attempt to properly detect ENCR_NULL_AUTH_AES_GMAC,
which has a nonzero IV.

Fix #13730.
2022-08-05 11:16:25 +00:00
Roland Knall d24d27ebc1 Qt: Fix interface auto slot
The signal attached "currentIndexChanged" takes only int as argument,
the correct signal is "currentTextChanged". This also fixes a crash
whenever you changed the visible/nonvisible setting for an interface
2022-08-05 08:56:22 +00:00
Gerald Combs 74e0b506be Windows: Don't define or check for WIN32.
_WIN32 is defined by the compiler, and is arguably a more reliable
test that WIN32. Switch to checking for _WIN32 in a couple of places in
the code.

Remove a WIN32 definition from config.h. It was added for the WinPcap
developer pack but we no longer use that.
2022-08-05 08:33:49 +00:00
Daniël van Eeden a0d03745a9 mysql: Handle unsigned fields in prepared stmt
The flag of unsigned fields is either 0x0 for signed integer fields or
0x80 (128) for unsigned integer fields.

The code expected 0x0 for signed and 0x1 for unsigned to match the right
dissector for the field, causing no match to be found.

Example client code:

```c

int main(int argc, char **argv) {
  MYSQL *con = mysql_init(NULL);
  if (mysql_real_connect(con, "127.0.0.1", "root", NULL, NULL, 4000, NULL, 0) ==
      NULL) {
    printf("%s\n", mysql_error(con));
    mysql_close(con);
    exit(1);
  }

  MYSQL_STMT *stmt = mysql_stmt_init(con);
  mysql_stmt_prepare(stmt, "DO ?", 4);

  MYSQL_BIND bind[1];
  int my_int = 1;
  bind[0].buffer_type = MYSQL_TYPE_TINY;
  bind[0].buffer = (void *)&my_int;
  bind[0].is_unsigned = 1;
  bind[0].is_null = 0;

  mysql_stmt_bind_param(stmt, bind);
  mysql_stmt_execute(stmt);
  mysql_stmt_close(stmt);
}
```
2022-08-05 08:07:20 +00:00
Chuck Craft 077547d033 dccp: allow port resolution in conversation table 2022-08-05 00:52:56 +00:00
John Thacker 5f05a705a6 ipsec: Don't include ICV in decrypted data with ESP NULL
ESP NULL can be used with a non NULL AUTH, when wishing to
provide authentication without encryption.

Part of #13730
2022-08-04 19:24:03 -04:00
John Thacker baf61478e4 rsync: Fix port pref
The port pref value is used in a callback, so convert that to
retrieving a range. Also, remove the old preference (it was
converted to use an auto preference some time ago but the
duplicate preference wasn't removed.)

Ping #14319
2022-08-04 08:14:14 -04:00
John Thacker 452b5e3e0f prefs: Remove prefs_register_decode_as_preference
All Decode As auto preferences are registered as ranges now,
so remove this internal function. Ping #14319.
2022-08-04 07:16:16 -04:00
Dylan Ulis 59909dfb5d CIP: Correct UTIME sub-seconds portion 2022-08-04 08:44:30 +00:00
Gerald Combs 0ca960c6d8 epan: Update our name resolution preference names.
Update the dns_pkt_addr_resolution, use_external_name_resolver, and
use_custom_dns_servers names to be more consistent. Make it more clear
that use_external_name_resolver uses you're system's DNS settings.
2022-08-04 06:00:34 +00:00
John Thacker 8604d03a98 prefs: Make all auto port preferences ranges
When a single port is added to a dissector along with an auto
preference, make it create a range preference (defaulting to
that single value.) This converts the rest of the auto port
preferences to ranges.

Ping #14319. Still to do are converting other non-auto port
preferences to auto preferences (e.g., sctp ports), and maybe
some minor cleanups.
2022-08-04 05:43:47 +00:00
David Perry 7238dad792 Always use `next_tvb` for X.25 payload 2022-08-04 03:23:18 +00:00
John Thacker 13bffe4630 prefs: Add default range to description of auto pref 2022-08-03 19:19:18 -04:00
Peter Dobransky fe12d2428c Add support for missing DPoE OAM leaf-branch attributes 2022-08-03 21:32:28 +00:00
Jaap Keuter 1c1d23e323 Asterix: update dissector after specification updates 2022-08-03 19:39:55 +02:00
Zoran Bošnjak 7547e7993c asterix: asterix-specs converter fix
Some new asterix editions contain nested 'Group' item inside 'Extended'.
In such case, a 'Group' item is processed like regular 'Element'.

Fixes #18238
2022-08-03 17:10:36 +00:00
Tomasz Moń bf26f538c6
wiretap: Do not silently limit capture length
Libpcap assumes that packet length is greater or equal to captured data
length. However, due to a bug in libpcap, it was possible for libpcap to
generate isochronous URB packets (WTAP_ENCAP_USB_LINUX_MMAPPED) with
captured data length greater than packet length. The discrepancy comes
from slightly different semantics in Linux kernel.

Linux kernel usbmon packet documentation mentions:
    unsigned int length;  /* 32: Length of data (submitted or actual) */
    unsigned int len_cap; /* 36: Delivered length */

Wireshark shows usbmon packet length as URB length (usb.urb_len) and
len_cap as Data length (usb.data_len). For usbmon isochronous IN packets
containing data (URB complete), usbmon length is "actual". Actual length
is the sum of payload packets length received from device. Delivered
length refers to the amount of data associated with usbmon packet, that
is the isochronous descriptors and actual isochronous data. There can be
multiple isochronous descriptors in single URB and the actual payload in
special cases can be noncontiguous (there can be gaps).

Libpcap when reading usbmon capture calculates packet length based on
usbmon packet structure size (64), "actual length" and number of
isochronous descriptors. This gives expected packet length as long as
there are no gaps between isochronous data. If there are gaps, the
calculated packet length will be smaller than delivered length.

Wireshark should show the frame length and captured length as provided
by the capture engine, even if the capture length is greater than frame
length. Silently limiting captured length essentially hides the issue
from the user and allows misbehaving capture engine to go unnoticed.

Passing unmodified Frame Length and Capture Length to dissectors (and
thus complete tvb) allows USB dissector to show all ISO Data fields
captured on Linux usbmon interface using bugged libpcap.

Fixes #18021
2022-08-03 18:50:53 +02:00