diff --git a/IPtProxy.go/go.mod b/IPtProxy.go/go.mod
index c741374359c887007eda96aaf96c5700a7b5b0bd..f6b888f4c7810131ef918004337e9592ed8df6be 100644
--- a/IPtProxy.go/go.mod
+++ b/IPtProxy.go/go.mod
@@ -9,7 +9,7 @@ replace (
 )
 
 require (
-	git.torproject.org/pluggable-transports/snowflake.git/v2 v2.2.0
+	git.torproject.org/pluggable-transports/snowflake.git/v2 v2.3.0
 	gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d
 	golang.org/x/mobile v0.0.0-20220518205345-8578da9835fd // indirect
 	golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098 // indirect
diff --git a/IPtProxy.go/go.sum b/IPtProxy.go/go.sum
index c62ac6a13fb4653fbd1a67eca7cfae8a512bdb37..a6d72e9a94e0fe64949c3942f15751bef087b6a6 100644
--- a/IPtProxy.go/go.sum
+++ b/IPtProxy.go/go.sum
@@ -34,6 +34,7 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/clarkduvall/hyperloglog v0.0.0-20171127014514-a0107a5d8004/go.mod h1:drodPoQNro6QBO6TJ/MpMZbz8Bn2eSDtRN6jpG4VGw8=
 github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
diff --git a/README.md b/README.md
index 76e14afebe1f0adfc28b927ea9ec1952200c3067..2a902f81d2f5084db931bf2f20ffb7396db233d2 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Obfs4proxy and Snowflake Pluggable Transports for iOS, MacOS and Android
 | Transport  | Version |
 |------------|--------:|
 | Obfs4proxy |  0.0.13 |
-| Snowflake  |   2.2.0 |
+| Snowflake  |   2.3.0 |
 
 Both Obfs4proxy and Snowflake Pluggable Transports are written in Go, which
 is a little annoying to use on iOS and Android.
diff --git a/build.sh b/build.sh
index ac719fead4bab19a40628ad0b83602b79b2edb54..e35e70552ca97b04adc2bd5d2be42efa69fca0b6 100755
--- a/build.sh
+++ b/build.sh
@@ -38,7 +38,7 @@ else
     cd ..
     git clone https://git.torproject.org/pluggable-transports/snowflake.git
     cd snowflake || exit 1
-    git checkout --force --quiet 4e7f8975
+    git checkout --force --quiet c983c13a
     cd ..
 fi
 
diff --git a/snowflake b/snowflake
index 4e7f8975273a8386e632cfa40a4fcf6f1a6a4aee..c983c13a84554d0ba1ffcdd054491090c0eafc54 160000
--- a/snowflake
+++ b/snowflake
@@ -1 +1 @@
-Subproject commit 4e7f8975273a8386e632cfa40a4fcf6f1a6a4aee
+Subproject commit c983c13a84554d0ba1ffcdd054491090c0eafc54
diff --git a/snowflake.patch b/snowflake.patch
index 223f85368aca155c872549e20a6e9834af0d3245..307866a0f7ceb2b4a8510689732e20fd3c9ed94d 100644
--- a/snowflake.patch
+++ b/snowflake.patch
@@ -78,10 +78,10 @@ index 2cb6549..060a639 100644
 +	sigChan <- syscall.SIGTERM
 +}
 diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go
-index 17f0126..ebbdc25 100644
+index 34f8abe..ec22f45 100644
 --- a/proxy/lib/snowflake.go
 +++ b/proxy/lib/snowflake.go
-@@ -120,6 +120,7 @@ type SnowflakeProxy struct {
+@@ -128,6 +128,7 @@ type SnowflakeProxy struct {
  	ProxyType       string
  	EventDispatcher event.SnowflakeEventDispatcher
  	shutdown        chan struct{}
@@ -89,7 +89,7 @@ index 17f0126..ebbdc25 100644
  }
  
  // Checks whether an IP address is a remote address for the client
-@@ -498,6 +499,8 @@ func (sf *SnowflakeProxy) runSession(sid string) {
+@@ -531,6 +532,8 @@ func (sf *SnowflakeProxy) runSession(sid string) {
  	select {
  	case <-dataChan:
  		log.Println("Connection successful.")