forked from quic-go/quic-go
send inchoate CHLO
This commit is contained in:
@@ -9,20 +9,15 @@ import (
|
|||||||
|
|
||||||
quic "github.com/lucas-clemente/quic-go"
|
quic "github.com/lucas-clemente/quic-go"
|
||||||
"github.com/lucas-clemente/quic-go/crypto"
|
"github.com/lucas-clemente/quic-go/crypto"
|
||||||
|
"github.com/lucas-clemente/quic-go/frames"
|
||||||
|
"github.com/lucas-clemente/quic-go/handshake"
|
||||||
"github.com/lucas-clemente/quic-go/protocol"
|
"github.com/lucas-clemente/quic-go/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
addr := "quic.clemente.io:6121"
|
addr := "quic.clemente.io:6121"
|
||||||
|
|
||||||
udpAddr, err := net.ResolveUDPAddr("udp", addr)
|
conn, err := connect(addr)
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(udpAddr.String())
|
|
||||||
|
|
||||||
conn, err := net.DialUDP("udp", nil, udpAddr)
|
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@@ -31,13 +26,14 @@ func main() {
|
|||||||
rand.Seed(time.Now().UTC().UnixNano())
|
rand.Seed(time.Now().UTC().UnixNano())
|
||||||
connectionID := protocol.ConnectionID(0x1337 + rand.Int63())
|
connectionID := protocol.ConnectionID(0x1337 + rand.Int63())
|
||||||
packetNumber := protocol.PacketNumber(1)
|
packetNumber := protocol.PacketNumber(1)
|
||||||
|
version := protocol.Version34
|
||||||
|
|
||||||
ph := quic.PublicHeader{
|
ph := quic.PublicHeader{
|
||||||
ConnectionID: connectionID,
|
ConnectionID: connectionID,
|
||||||
PacketNumber: packetNumber,
|
PacketNumber: packetNumber,
|
||||||
PacketNumberLen: protocol.PacketNumberLen2,
|
PacketNumberLen: protocol.PacketNumberLen6,
|
||||||
VersionFlag: true,
|
VersionFlag: true,
|
||||||
VersionNumber: protocol.Version34,
|
VersionNumber: version,
|
||||||
}
|
}
|
||||||
|
|
||||||
raw := make([]byte, 0, protocol.MaxPacketSize)
|
raw := make([]byte, 0, protocol.MaxPacketSize)
|
||||||
@@ -49,6 +45,22 @@ func main() {
|
|||||||
}
|
}
|
||||||
payloadStartIndex := buffer.Len()
|
payloadStartIndex := buffer.Len()
|
||||||
|
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
|
||||||
|
tags := make(map[handshake.Tag][]byte)
|
||||||
|
tags[handshake.TagSNI] = []byte("quic.clemente.io")
|
||||||
|
tags[handshake.TagPDMD] = []byte("X509")
|
||||||
|
tags[handshake.TagPAD] = bytes.Repeat([]byte("F"), 1000)
|
||||||
|
handshake.WriteHandshakeMessage(b, handshake.TagCHLO, tags)
|
||||||
|
|
||||||
|
frame := frames.StreamFrame{
|
||||||
|
StreamID: 1,
|
||||||
|
DataLenPresent: true,
|
||||||
|
Data: b.Bytes(),
|
||||||
|
}
|
||||||
|
|
||||||
|
frame.Write(buffer, version)
|
||||||
|
|
||||||
raw = raw[0:buffer.Len()]
|
raw = raw[0:buffer.Len()]
|
||||||
aead := crypto.NullAEAD{}
|
aead := crypto.NullAEAD{}
|
||||||
aead.Seal(raw[payloadStartIndex:payloadStartIndex], raw[payloadStartIndex:], packetNumber, raw[:payloadStartIndex])
|
aead.Seal(raw[payloadStartIndex:payloadStartIndex], raw[payloadStartIndex:], packetNumber, raw[:payloadStartIndex])
|
||||||
@@ -67,3 +79,17 @@ func main() {
|
|||||||
fmt.Println(data)
|
fmt.Println(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func connect(addr string) (*net.UDPConn, error) {
|
||||||
|
udpAddr, err := net.ResolveUDPAddr("udp", addr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
conn, err := net.DialUDP("udp", nil, udpAddr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return conn, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user