News for hackers. Stuff that matters.

__padding

Re:Show HN: Pcapsql – SQL interface for PCAP analysis on Friday January 02, 2026 @08:33AM (#46464569)
Some fun stuff you can do - RTT analysis, just using SQL :-) :

  -- RTT Analysis using TCP timestamp echo
  -- Measures actual network RTT by tracking when our ts_val gets echoed back
  -- For client-side captures: dst_port in (80,443) = outbound, src_port in (80,443) = inbound


  WITH outbound AS (
      -- Packets TO server (dst_port is well-known)
      SELECT
          t.frame_number,
          f.timestamp as send_ts,
          t.dst_port as server_port,
          t.ts_val,
          i.src_ip as local_ip,
          t.src_port as local_port,
          i.dst_ip as remote_ip
      FROM tcp t
      JOIN ipv4 i ON t.frame_number = i.frame_number
      JOIN frames f ON t.frame_number = f.frame_number
      WHERE t.ts_val IS NOT NULL
         AND t.dst_port IN (80, 443, 8080, 8443)
  ),
  inbound AS (
      -- Packets FROM server (src_port is well-known)
      SELECT
          t.frame_number,
          f.timestamp as recv_ts,
          t.src_port as server_port,
          t.ts_ecr,
          i.dst_ip as local_ip,
          t.dst_port as local_port,
          i.src_ip as remote_ip
      FROM tcp t
      JOIN ipv4 i ON t.frame_number = i.frame_number
      JOIN frames f ON t.frame_number = f.frame_number
      WHERE t.ts_ecr IS NOT NULL
        AND t.ts_ecr > 0
        AND t.src_port IN (80, 443, 8080, 8443)
  ),
  -- Match: find when our ts_val was echoed back by the server
  rtt_samples AS (
      SELECT
          o.frame_number as send_frame,
          MIN(i.frame_number) as recv_frame,
          o.server_port,
          o.send_ts,
          MIN(i.recv_ts) as recv_ts
      FROM outbound o
      JOIN inbound i
          ON o.local_ip = i.local_ip
          AND o.local_port = i.local_port
          AND o.remote_ip = i.remote_ip
          AND o.server_port = i.server_port
          AND i.ts_ecr = o.ts_val
          AND i.frame_number > o.frame_number
      GROUP BY o.frame_number, o.server_port, o.send_ts
  ),
  rtt_values AS (
      SELECT
          server_port,
          EXTRACT(EPOCH FROM (recv_ts - send_ts)) * 1000.0 as rtt_ms
      FROM rtt_samples
      WHERE recv_ts > send_ts
  )
  SELECT
      server_port,
      hdr_count(hdr_histogram(rtt_ms)) as samples,
      ROUND(hdr_min(hdr_histogram(rtt_ms)), 2) as min_ms,
      ROUND(hdr_percentile(hdr_histogram(rtt_ms), 0.50), 2) as p50_ms,
      ROUND(hdr_percentile(hdr_histogram(rtt_ms), 0.75), 2) as p75_ms,
      ROUND(hdr_percentile(hdr_histogram(rtt_ms), 0.95), 2) as p95_ms,
      ROUND(hdr_percentile(hdr_histogram(rtt_ms), 0.99), 2) as p99_ms,
      ROUND(hdr_max(hdr_histogram(rtt_ms)), 2) as max_ms,
      ROUND(hdr_mean(hdr_histogram(rtt_ms)), 2) as mean_ms
  FROM rtt_values
  WHERE rtt_ms > 0 AND rtt_ms < 30000
  GROUP BY server_port
  ORDER BY samples DESC;

Results from my local machine to a speedtest server:

  +-------------+---------+--------+--------+--------+--------+--------+--------+---------+
     | server_port | samples | min_ms | p50_ms | p75_ms | p95_ms | p99_ms | max_ms | mean_ms |
     +=======================================================================================+
     | 443         | 315     | 1.0    | 75.0   | 263.0  | 349.0  | 3007.0 | 3007.0 | 177.27  |
     |-------------+---------+--------+--------+--------+--------+--------+--------+---------|
     | 80          | 6       | 70.0   | 71.0   | 72.0   | 72.0   | 72.0   | 72.0   | 71.17   |
     +-------------+---------+--------+--------+--------+--------+--------+--------+---------+

Show HN: Pcapsql – SQL interface for PCAP analysis

https://github.com/mtottenh/pcapsql

I was chatting with a colleague a while ago, and they wanted to run some SQL queries against a PCAP – aggregate by source IP, that sort of thing. They went looking and found PacketQ (DNS/ICMP only), Apache Drill's PCAP support (outer headers only), DuckDB has a PCAP reader community extension (same deal, limited to outer headers). You can always write a one-off script with scapy or gopacket,...

( Read More... | 1 comment | on HN )
I’ve not looked at it in a while but sled/rio were interesting up and coming options https://github.com/spacejam/sled
Re:Why our website looks like an operating system on Friday September 12, 2025 @03:01AM (#45219409)
This is a pet peeve of mine - but with a phone with a small display (eg iPhone 12 mini) it feels like 1/3rd of the screen is taken up with ‘menu bars/banners’ between browser url bar/site nav bars/bottom banner i can’t dismiss about talking to an AI

This is even worse on pages like the about page where it feels like only 1/3rd of the screen is available for scrolling/reading text; it just feel totally hostile to browse.

“Please won’t someone think of the children” s/children/those of us with small hands and correspondingly small phone screens/

Re:Ask HN: Who is hiring? (June 2025) on Monday June 02, 2025 @05:34PM (#44163324)
Akamai Technologies | Multiple Software Engineering Roles | EU Remote, US Remote | Full-time*

I'm a principal lead on Akamai's Linux Performance Team, and we're actively hiring talented engineers to join our team!

What we do: We're a specialized group of software engineers who tackle complex performance challenges across Akamai's entire product stack. While many know us for our CDN, over two-thirds of our revenue now comes from security and compute products - you'll be working on problems that directly impact millions of users across our cloud platform and security solutions.

Recent projects we've shipped: - Hardware offload of network firewall rules for massive performance gains - eBPF tracing implementations across one of the world's largest CDNs

Experience that would be valuable: - Linux kernel development experience - eBPF expertise - DPDK knowledge - Strong systems programming background - Passion for performance optimization and debugging

Why join us: You'll work on cutting-edge performance problems at internet scale, collaborate with brilliant engineers, and have the flexibility of remote work across EU and US time zones. Your work will directly impact how the internet performs for millions of users.

Contact: [email protected]

Re:Linux Kernel Spectre v2 SMT mitigations on Sunday April 16, 2023 @01:22PM (#35592101)
Not entirely sure what the complaint is. I know HN is skewed very US heavy - but most of the rest of the world uses D/M/Y. I for one find M/D/Y bonkers ¯\_ (ツ)_/¯
Re:Akamai (acquirer of Linode) raises their prices on Wednesday March 01, 2023 @11:05AM (#34983837)
Egress - typically one of the most expensive parts is getting 50% cheaper.
Re:Linode rebranded as Akamai’s cloud computing services on Wednesday February 15, 2023 @02:45AM (#34801146)
Our marketing team is crap, there’s no consistency e.g. we acquired prolexic and still use that brand.

Internally a number of the engineers are scratching our heads at this one.

Re:Ask HN: Hybrid/Remote software team rituals on Friday April 08, 2022 @04:38AM (#30954716)
My team is distributed (1 us west coast, 1 us central, 1 us east, 1 Europe - me) and we have had the same set of rituals pre/post pandemic.

- weekly 1:1 with our line manager

- weekly Team meeting (15 minutes of status updates, rest of the time talking over project ideas or other LoB)

- shared team chat room on Webex teams.

Both meetings are video optional but most folks choose to hop on video.

That’s it. It works well, and there is minimal bureaucracy.

Re:Akamai and Micro Segmentation on Friday October 01, 2021 @06:16AM (#28716571)
My takeaway is that it’s iptables + a dynamic policy engine, with some sort of helpful visualisation dashboard for IT admins to program policy.

But guardicore’s website is just full of marketing fluff with very little detail.

Hopefully someone from either Akamai or guardicore lurks here and can explain

Re:How PCI-Express works (2020) on Saturday September 11, 2021 @08:12AM (#28491319)
Typically with devices like network cards (that also operate over PCI-E)

You send the device a circular list of descriptors (pointers) to a region of main memory.

In order to send data to the device, you write your network packet to the memory region associated with the pointer of the current ‘head’ of the descriptor list.

So far, you have a ring of pointers, one of those pointers points to a location you just wrote to in ram.

You then tell the device that the head of the list has changed (as you just wrote some data to the region that the head of the list is pointing to - so it can consume that pointer), the device then goes ahead and copies the data from ram into an internal buffer on the card. Once the data is consumed, the tail pointer of the ring buffer is updated to indicate that the card is finished with that memory region.