|
| 1 | +# TCP通信でのRST送信のサンプル |
| 2 | + |
| 3 | +Goでは ```*net.TCPConn.SetLinger()``` にて ```SO_LINGER``` が設定出来る。 |
| 4 | +値を ```0``` で設定すると切断時にRST送信が行われる。(これはC言語でも同じ) |
| 5 | + |
| 6 | +```go |
| 7 | +tcpConn, ok := conn.(*net.TCPConn) |
| 8 | +if ok { |
| 9 | + tcpConn.SetLinger(0) |
| 10 | +} |
| 11 | + |
| 12 | +conn.Close() // RST送信 |
| 13 | +``` |
| 14 | + |
| 15 | +```sh |
| 16 | +$ task |
| 17 | +task: [build] go build -o app main.go |
| 18 | +task: [run-fin] sudo tcpdump -i lo -n 'tcp port 8888' -S & |
| 19 | +task: [run-fin] sleep 1 |
| 20 | +tcpdump: verbose output suppressed, use -v[v]... for full protocol decode |
| 21 | +listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes |
| 22 | +task: [run-fin] ./app -server & |
| 23 | +task: [run-fin] ./app |
| 24 | +task: [run-fin] sleep 2 |
| 25 | +09:22:02.504826 IP 127.0.0.1.32782 > 127.0.0.1.8888: Flags [S], seq 1561972627, win 43690, options [mss 65495,sackOK,TS val 3209706398 ecr 0,nop,wscale 7], length 0 |
| 26 | +09:22:02.504835 IP 127.0.0.1.8888 > 127.0.0.1.32782: Flags [S.], seq 2366941560, ack 1561972628, win 43690, options [mss 65495,sackOK,TS val 3209706398 ecr 3209706398,nop,wscale 7], length 0 |
| 27 | +09:22:02.504844 IP 127.0.0.1.32782 > 127.0.0.1.8888: Flags [.], ack 2366941561, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 0 |
| 28 | +09:22:02.504914 IP 127.0.0.1.8888 > 127.0.0.1.32782: Flags [P.], seq 2366941561:2366941566, ack 1561972628, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 5 |
| 29 | +09:22:02.504924 IP 127.0.0.1.32782 > 127.0.0.1.8888: Flags [.], ack 2366941566, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 0 |
| 30 | +09:22:02.504944 IP 127.0.0.1.32782 > 127.0.0.1.8888: Flags [F.], seq 1561972628, ack 2366941566, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 0 |
| 31 | +09:22:02.504982 IP 127.0.0.1.8888 > 127.0.0.1.32782: Flags [F.], seq 2366941566, ack 1561972629, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 0 |
| 32 | +09:22:02.504995 IP 127.0.0.1.32782 > 127.0.0.1.8888: Flags [.], ack 2366941567, win 342, options [nop,nop,TS val 3209706398 ecr 3209706398], length 0 |
| 33 | +task: [run-fin] sudo pkill tcpdump |
| 34 | + |
| 35 | +8 packets captured |
| 36 | +16 packets received by filter |
| 37 | +0 packets dropped by kernel |
| 38 | +task: [run] sleep 2 |
| 39 | +task: [run-rst] sudo tcpdump -i lo -n 'tcp port 8888' -S & |
| 40 | +task: [run-rst] sleep 1 |
| 41 | +tcpdump: verbose output suppressed, use -v[v]... for full protocol decode |
| 42 | +listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes |
| 43 | +task: [run-rst] ./app -server -rst & |
| 44 | +task: [run-rst] ./app -rst |
| 45 | +task: [run-rst] sleep 2 |
| 46 | +09:22:07.566462 IP 127.0.0.1.50180 > 127.0.0.1.8888: Flags [S], seq 3347564028, win 43690, options [mss 65495,sackOK,TS val 3209711459 ecr 0,nop,wscale 7], length 0 |
| 47 | +09:22:07.566476 IP 127.0.0.1.8888 > 127.0.0.1.50180: Flags [S.], seq 671550310, ack 3347564029, win 43690, options [mss 65495,sackOK,TS val 3209711459 ecr 3209711459,nop,wscale 7], length 0 |
| 48 | +09:22:07.566485 IP 127.0.0.1.50180 > 127.0.0.1.8888: Flags [.], ack 671550311, win 342, options [nop,nop,TS val 3209711459 ecr 3209711459], length 0 |
| 49 | +09:22:07.566556 IP 127.0.0.1.8888 > 127.0.0.1.50180: Flags [P.], seq 671550311:671550316, ack 3347564029, win 342, options [nop,nop,TS val 3209711459 ecr 3209711459], length 5 |
| 50 | +09:22:07.566566 IP 127.0.0.1.50180 > 127.0.0.1.8888: Flags [.], ack 671550316, win 342, options [nop,nop,TS val 3209711459 ecr 3209711459], length 0 |
| 51 | +09:22:07.566589 IP 127.0.0.1.50180 > 127.0.0.1.8888: Flags [R.], seq 3347564029, ack 671550316, win 342, options [nop,nop,TS val 3209711459 ecr 3209711459], length 0 |
| 52 | +task: [run-rst] sudo pkill tcpdump |
| 53 | + |
| 54 | +6 packets captured |
| 55 | +12 packets received by filter |
| 56 | +0 packets dropped by kernel |
| 57 | +``` |
0 commit comments