i can think of 3 different ways this can happen -
1: too many packets too fast, the packets-to-print-buffer runs full, and the kernel "drops" the packets curl sends before tcpdump has a chance to print them to you. solution would be to increase the buffer space, eg by using --buffer-size=102400
(this would dedicated about 100MB of ram to the buffer, i'm not sure what the default size is, but i think it's in the range of 1-4MB)
2: you have multiple network "interfaces", and you're listening in on the wrong one. i'm not sure how to ask curl which interface it uses, but you can explicitly tell curl to download via a specific interface, by doing curl --interface eth0 URL
- and on Linux & Mac & BSD, you can get a list of available interfaces by doing sudo ifconfig
(and i think the windows equivalent is in the control panel somewhere, but idk)
3: tcpdump's default user can't read the packets of the user curl is running as for some reason... turns out tcpdump by default drops into its own user called tcpdump
when capturing, you could try to capture from the same user that curl runs as by using -Z curluser
, or force tcpdump to capture as root by doing -Z root