3.1猜谜游戏介绍
3.1.1生成随机数
package main
import(
"fmt"
"math/rand"
)
func main(){
maxnum:=100
secretnumber:=rand.Intn(maxnum)
fmt.println("the secret number is",secretnumber)
}
生成的数字相同 生成随机数需要用到“math/rand”
3.1.2生成随机数V2
加入“time”
rand.Seed(time.now().unixnano()) 用时间戳来初始化随机数种子
这样才会生成不同数字
3.1.3读取用户输入
加入 “bufio”
“os”
“strconv”
“strings”
bufo.NewReeder(os.stdin) 只读
3.1.4实现判断逻辑
if gues > secretNumber{
fmt.println("you guess is bigger then the secret number . please try again")
}
3.1.5实现游戏循环
3.2 在线词典介绍
3.2.1抓包
3.2.2代码生成
defer resp.body.close() defer会在结束后调用close函数(加defer避免资源泄露)
3.2.3生成request body
3.2.4解析response body
“%#v”打印结构体
3.2.6完善代码
3.3SOCKS5代理介绍
原理
分为四个阶段;第一个阶段协商阶段,第二个阶段是认证阶段,第三个阶段是请求阶段,第四个阶段是relay阶段
3.3.1 TCP-echo server
net.listen粘贴一个端口;server.Accept接受一个请求
bufro.NewReader给连接创建一个只读的带缓冲的NEW
redder.Readbyte每次读一个字节
用com.write([]byte{b})把字节写入
3.3.2auth
单字节可以用reader.roadbyte读单字节
报文是网络中交换与数据传输的数据单元,即站点一次性要发送的数据块(报文不仅包括要传送的数据,也包括必要的附加信息,如目的IP、目的端口、源地址、源端口、数据长度、所用协议、加密等等)
3.3.3请求阶段
创建一个长度为4的缓冲区:buf:=make([]byte,4)用io.readfull(reader,buf)将它填充就可一次性读取4个字段