@@ -44,21 +44,24 @@ func Main[T any](flagsGenerator FlagsGenerator[T], sh StreamHandler[T]) {
44
44
addr string
45
45
tlsCert string
46
46
tlsKey string
47
+ keyLog string
47
48
baton T
48
49
)
49
50
50
- flag .StringVar (& addr , "listen" ,
51
- "127.0.0.1:853" , "UDP address to listen on." )
52
- flag .StringVar (& tlsCert , "cert" ,
53
- "cert.pem" , "TLS certificate path." )
54
- flag .StringVar (& tlsKey , "key" ,
55
- "key.pem" , "TLS key path." )
51
+ flag .StringVar (& addr , "listen" , "127.0.0.1:853" ,
52
+ "UDP address to listen on." )
53
+ flag .StringVar (& tlsCert , "cert" , "cert.pem" ,
54
+ "TLS certificate path." )
55
+ flag .StringVar (& tlsKey , "key" , "key.pem" ,
56
+ "TLS key path." )
57
+ flag .StringVar (& keyLog , "keylog" , "" ,
58
+ "TLS key log file (e.g. for Wireshark analysis) - none if empty" )
56
59
if flagsGenerator != nil {
57
60
flagsGenerator (& baton )
58
61
}
59
62
flag .Parse ()
60
63
61
- return loop (l , ctx , sh , addr , tlsCert , tlsKey , baton )
64
+ return loop (l , ctx , sh , addr , tlsCert , tlsKey , keyLog , baton )
62
65
}, func (error ) {
63
66
cancel ()
64
67
})
@@ -87,7 +90,7 @@ func Main[T any](flagsGenerator FlagsGenerator[T], sh StreamHandler[T]) {
87
90
}
88
91
89
92
func loop [T any ](l log.Logger , ctx context.Context , sh StreamHandler [T ],
90
- addr string , tlsCert string , tlsKey string ,
93
+ addr string , tlsCert string , tlsKey string , keyLog string ,
91
94
baton T ) error {
92
95
93
96
cert , err := tls .LoadX509KeyPair (tlsCert , tlsKey )
@@ -101,6 +104,16 @@ func loop[T any](l log.Logger, ctx context.Context, sh StreamHandler[T],
101
104
MinVersion : tls .VersionTLS13 ,
102
105
}
103
106
107
+ if keyLog != "" {
108
+ keyLogFile , err := os .OpenFile (keyLog , os .O_APPEND | os .O_CREATE | os .O_WRONLY , 0755 )
109
+ if err != nil {
110
+ return fmt .Errorf ("open keylog file: %w" , err )
111
+ }
112
+ defer keyLogFile .Close ()
113
+ tls .KeyLogWriter = keyLogFile
114
+ }
115
+
116
+
104
117
quic_conf := quic.Config {
105
118
MaxIdleTimeout : 10 * time .Second ,
106
119
Allow0RTT : true ,
0 commit comments