通过wireshark抓包来学习TCPHTTP网络协议

通过wireshark抓包来学习TCPHTTP网络协议

ID:46270673

大小:78.00 KB

页数:6页

时间:2019-11-22

通过wireshark抓包来学习TCPHTTP网络协议_第1页
通过wireshark抓包来学习TCPHTTP网络协议_第2页
通过wireshark抓包来学习TCPHTTP网络协议_第3页
通过wireshark抓包来学习TCPHTTP网络协议_第4页
通过wireshark抓包来学习TCPHTTP网络协议_第5页
资源描述:

《通过wireshark抓包来学习TCPHTTP网络协议》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、通过wireshark抓包来学习TCPHTTP网络协议很多招聘需求上都会要求熟悉TCP/IP协议、socket编程之类的,可见这一块是对于沁编程是非常重要的。作为一个野生程序员对这块没什么概念,于是便找来一些书籍想来补补。很多关于协议的大部头书都是非常枯燥的,我特意挑了比较友好的《图解TCP/IP》和《图解HTTP》,但看了一遍仍是云里雾里,找不到掌握了知识后的那种自信。所以得换一种思路来学习通过敲代码来学习,通过抓包工具来分析网络,抓包神器首推wiresharko本文是自己学习TCP过程的远录和总结。1.使用TCPsocket实现服务端和客户端,模拟http请求写

2、一个简单的server和client,模拟最简单的http请求,即client发送get请求,server返回hello。这里是用golang写的,最近在学习golango完成之后可以使用postman充当client测试你的server能不能正常返回响应,或者使用完备的http模块测试你的client。client向指定端口发送连接请求,连接后发送一个request并收到response断开连接并退出。server可以和不同的客户端建立多个TCP连接,每来了一个新连接就开一个goruntine去处理。TCP是全双工的,所谓全双工就是读写有两个通道,互不影响,我当时

3、还纳闷在conn上又读又写不会出毛病吗TCP是流式传输,所以要在for中不断的去读取数据,直到断开。注意没有断开连接的时候是读不到EOF的,代码使用了bufio包中的scanner这个API来逐行读取数据,以为结束标志。但数据并不都是以结尾的,如果读不到结尾,read就会一直阻塞,所以我们需要通过header中的length判断数据的大小。我这里偷懒了,只读了header,读到header下面的空行就返回了。加了个超时,客户端5s不理我就断线,如果有数据过来就保持连接。server:packagemainimport("bufio""bytes""fmt""

4、io""net""time")constrn二"r"funcmain(){,err:=net丄isten(ntcpn,°:8888M)iferr!=nil{panic(err)}fmt.Println("listento8888")for{conn,err:=I.Accept()iferr!=nil{fmt.Println(Hconnerr:",err)}gohandleConn(conn)}}funchandleConn(connnet.Conn){deferconn.Close()deferfmt.Println("关闭")fmt.Println("新连

5、接:",conn.RemoteAddr())t:=time.Now().Unix()〃超时gofunc(t*int64){for{iftime.Now().Unix()・*t>=5{fmtPrintln(n超时")conn.Close()return}time.Sleep(100*time.Millisecond)}}(&t)for{data,err:=readTcp(conn)讦err!=nil{讦err==io.EOF{continue}else{fmtPrintln("readerr:",err)break}}讦(data>0){writeTcp(conn)t

6、=time.Now().Unix()}else{break}}}funcreadTcp(connnet.Conn)(intrerror){varbufbytes.Buffervarerrerrorrd:=bufio.NewScanner(conn)total:=0forrd.Scan(){varnintnferr=buf.Write(rd.Bytes())iferr!=nil{panic(err)}buf.Write([]byte(rn))total+=nfmt.Println(M读到字节:",n)讦n==0{break}}err=rd.Err()fmt.Print

7、in("总字节数::total)fmt.Pnntln("内容:",rn,buf.StringO)returntotal,err}funcwriteTcp(connnet.Conn){wt:二bufio.NewWriter(conn)wt.WriteStringC'HTTP/l.l200OK"+rn)wt.WriteStringC'Date:11+time.Now().String()+rn)wt.WriteStringCContent・Length:5n+rn)wt.WriteString(”Content-Type:text/plairT+rn)wtWrite

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。