Skip to content

High failure rate of HTTP/3 #92

Description

@Cuthead

673c6c1 set the UDP source port to below the destination port 443 to bypass QUIC censorship. But many ports below 443 are already in use by privileged processes and unable to bind.

Measurement script,

total=0
fail=0

while true; do
  total=$((total+1))

  if ! timeout 3 curl --http3-only \
      https://claude.ai/cdn-cgi/trace --head < /dev/null > /dev/null 2>&1; then
    fail=$((fail+1))
    echo "[FAIL]"
  else
    echo "[OK]"
  fi

  rate=$(awk "BEGIN { printf \"%.2f\", ($fail/$total)*100 }")
  echo "Total=$total Fail=$fail FailRate=${rate}%"
  sleep 0.5
done

Result,

Total=1000 Fail=423 FailRate=42.30%

phantomsocks log,

dial udp [2001:470:c:26::2]:171->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:116->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:33->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:254->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:308->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:123->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:392->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:2->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:221->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:171->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:116->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:255->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:252->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:71->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:53->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:259->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:264->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:6->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:191->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:437->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:181->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:346->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:204->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:274->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:7->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:58->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:390->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:162->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:151->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:50->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:279->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:357->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:91->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:259->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:258->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:296->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:440->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:271->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:115->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:375->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:93->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:240->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:171->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:142->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:158->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:394->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:66->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:93->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:269->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:126->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:284->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:256->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:342->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:217->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:64->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:356->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:312->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:380->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:254->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:207->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:129->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:342->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:382->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:209->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:254->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:207->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:141->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:133->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:151->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:364->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:240->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:425->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:288->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:299->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:103->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:282->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:191->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:49->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:7->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:262->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:276->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:275->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:44->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:339->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:347->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:403->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:163->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:300->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:143->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:28->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:251->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:316->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:284->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:106->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:99->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:262->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:384->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:294->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:262->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:149->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:434->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:6->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:146->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:163->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:390->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:300->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:297->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:291->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:416->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:387->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:384->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:88->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:25->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:384->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:381->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:51->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:326->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:25->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:278->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:163->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:284->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:88->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:387->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:338->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:29->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:275->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:123->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:267->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:284->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:306->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:25->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:201->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:221->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:235->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:174->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:85->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:53->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:328->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:352->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:119->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:335->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:275->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:289->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:299->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:191->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:221->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:214->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:257->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:278->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:340->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:144->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:412->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:19->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:331->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:331->[2607:6bc0::10]:443: bind: address already in use
dial udp [2001:470:c:26::2]:110->[2607:6bc0::10]:443: bind: address already in use

Can we use a garbage UDP packet instead to bypass?

https://gfw.report/publications/usenixsecurity25/en/#sec:7-circumvention

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions