ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

利用Socket编写TCP客户端工具访问网站时接收数据循环结束标志不是None而是按照长度

2022-05-31 18:02:05  阅读:190  来源: 互联网

标签:None target recv self socket 接收数据 data port Socket


  代码比较简单,就是利用socket模块模拟TCP客户端,这里就是模拟浏览器发起对网站的访问,假设socket.recv(1024)所接收的内容长度大于1024字节,那么需要循环接收,那么结束的标志是什么呢?并不是None,而是按照接收到的数据长度来判断是否已经接收完整。

 1 import socket
 2 import sys
 3 import optparse
 4 
 5 class TCPClient:
 6     def __init__(self) -> None:
 7         self.target = self.get_params()[0]
 8         self.port = self.get_params()[1]
 9 
10     def get_params(self):
11         parser = optparse.OptionParser('Usage: <Program> -t target -p port')
12         parser.add_option('-t', '--target', dest='target', type='string', help='Specify target')
13         parser.add_option('-p', '--port', dest='port', type='int', help='Specify port to connect')
14         options, args = parser.parse_args()
15         if options.target is None or options.port is None:
16             print(parser.usage)
17             sys.exit()
18         return options.target, options.port
19     
20 
21     def run(self):
22         try:
23             client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
24             # client_s.settimeout(2)
25             client_s.connect((self.target, self.port))
26             # print(client_s.recv(4096).decode('utf-8'))
27             send_data = "GET / HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0\r\n\r\n"
28             client_s.send(send_data.encode('utf-8'))            
29             recv_data = ""
30             while True:
31                 data = client_s.recv(1024).decode('utf-8')
32                 if len(data) == 0:
33                     break
34                 recv_data = recv_data + data
35             print(recv_data)
36         except Exception as e:
37             print(e)
38             sys.exit()
39 
40 if __name__ == '__main__':
41     tcpclient = TCPClient()
42     tcpclient.run()

 

标签:None,target,recv,self,socket,接收数据,data,port,Socket
来源: https://www.cnblogs.com/jason-huawen/p/16331477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有