Socket——向FTP服务器发送消息并获得响应

1、简介

  • Socket(套接字)是网络编程中用于描述IP地址和端口的一个抽象概念,通过它可以实现不同主机间的通信。套接字可以分为几种不同的类型,每种类型对应不同的协议和传输模式。

1.1、基本概念

  • IP地址:用于标识网络中的计算机或设备。
  • 端口:用于标识计算机上的特定服务或进程。
  • 套接字:IP地址和端口的组合,用于实现网络通信。

1.2、套接字类型

  • 流式套接字(Stream Socket):基于TCP(Transmission Control Protocol)协议,提供面向连接、可靠的字节流服务。适用于需要高可靠性的数据传输场景,如HTTP、FTP等。
  • 数据报套接字(Datagram Socket):基于UDP(User Datagram Protocol)协议,提供无连接、不可靠的消息传递服务。适用于对实时性要求较高,但对可靠性要求较低的场景,如视频传输、在线游戏等。
  • 原始套接字(Raw Socket):允许直接访问底层协议,如IP、ICMP等,通常用于网络诊断和开发网络协议。

1.3、编程基本步骤

  • 创建套接字
    • import socket
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建一个TCP/IP套接字
      # socket.AF_INET:表示使用IPv4地址。
      # socket.SOCK_STREAM:表示使用TCP协议。
  • 绑定地址和端口
    • s.bind(('localhost', 8080))  # 绑定到本地地址和端口
  • 监听连接(服务器端特有)
    • s.listen(5)  # 开始监听,最多允许5个连接排队
  • 接受连接(服务器端特有)
    • conn, addr = s.accept()  # 接受一个客户端连接
      print('Connected by', addr)
  • 连接服务器(客户端特有)
    • s.connect(('localhost', 8080))  # 连接到服务器
  • 发送和接收数据
    • s.sendall(b'Hello, world')  # 发送数据
      data = s.recv(1024)  # 接收数据
  • 关闭套接字
    • s.close()  # 关闭套接字

2、过程

  • 准备一个FTP服务器,这里使用LightFTP。安装和启动过程参考:FTP协议——LightFTP安装(Linux)_lwftp-CSDN博客
  • 首先准备好要发送的消息(十六进制),可以使用wireshark捕获。
  • 由于我的LightFTP是安装在虚拟机中,套接字程序是在本机中运行的,所以目的ip地址要填虚拟机的ip地址。 
    • import socket
      import struct
      
      def send_to_server(server_ip, server_port, messages):
          try:
              # 创建一个 TCP/IP 套接字
              sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      
              # 连接到服务器
              server_address = (server_ip, server_port)
              print(f"Connecting to {server_ip} port {server_port}")
              sock.connect(server_address)
      
              # 接受连接响应
              response = sock.recv(4096)
              if response is not None:
                  print(f"Received response for message: {response}")
      
              try:
                  for i, message in enumerate(messages):
                      # 发送消息
                      print(f"Sending message {i + 1}: {message}")
                      sock.sendall(message)
      
                      # 接收服务器的响应
                      response = sock.recv(4096)
                      print(f"Received response for message {i + 1}: {response}")
              finally:
                  # 关闭套接字
                  print("Closing connection")
                  sock.close()
      
          except Exception as e:
              print(f"An error occurred: {e}")
      
      # 转换消息格式
      def transform(msg):
          strInput = msg  # 输入的十六进制字符串
          dataSend = b""  # 初始化一个空的字节对象,用于存储转换后的二进制数据
          shortInput = ""  # 初始化一个空字符串,用于暂存每两个字符
          cnt = 1  # 初始化计数器,记录字符位置
      
          for chInput in strInput:
              shortInput += chInput  # 将当前字符添加到 shortInput
              if cnt % 2 == 0:  # 如果计数器是偶数,表示已经收集到两个字符
                  intInput = int(shortInput, 16)  # 将两个字符的十六进制字符串转换为整数
                  dataSend += struct.pack(">B", intInput)  # 将整数打包为一个字节,并添加到 dataSend
                  shortInput = ""  # 清空 shortInput,准备下一次收集两个字符
              cnt += 1  # 增加计数器
      
          return dataSend  # 返回转换后的二进制数据
      
      
      if __name__ == "__main__":
          server_ip = '192.168.182.130' # 改为FTP服务器的ip
          server_port = 21  # FTP 服务器默认端口是 21
          # 十六进制消息
          msgs = [
              '555345522077656261646d696e0d0a',  # 登录用户名
              '50415353203232320d0a',  # 密码
              '4c4953540d0a'  # ls
          ]
          messages = [transform(msg) for msg in msgs]
      
          send_to_server(server_ip, server_port, messages)
  • 运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745653.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

厂区滴漏智能识别摄像机

当今,随着智能技术的迅猛发展,智能识别摄像机正逐步应用于各个行业,特别是在工业生产环境中,其作用愈发凸显。其中,厂区滴漏智能识别摄像机的应用成为了保障生产安全和环境保护的重要手段之一。厂区滴漏智能识别摄像机…

简述Java项目中VO,BO,PO,DO,DTO之类的文件概念、易混点

VO,BO,PO,DO,DTO 概念易混点一:VO和DTO- 让我们通过一个实例来阐释DTO和VO的概念及其应用差异:小结:VO专注于展示,而DTO则用于数据的传输和业务逻辑的处理。 二:BO和PO小…

记录 Bonobo Git 服务器 SMTP 设置

Bonobo 使用标准的 .NET SMTP 设置&#xff0c;可以在 web.config 中指定这些设置。 <system.net><mailSettings><smtp deliveryMethod"network" from"bonobobonoserver.your.domain"><network host"accessible.smtp.host"…

用一个暑假|用AlGC-stable diffusion 辅助服装设计及展示,让你在同龄人中脱颖而出!

大家好&#xff0c;我是设计师阿威 Stable Diffusion是一款开源AI绘画工具&#xff0c; 用户输入语言指令&#xff0c;即可自动生成各种风格的绘画图片 Stable Diffusion功能强大&#xff0c;生态完整、使用方便。支持大部分视觉模型上传&#xff0c;且可自己定制模型&#x…

AI X HI:塑造数智时代的人类镜像,网易这场分享不能错过!

2001 年&#xff0c;网易正式成立在线游戏事业部。从那以后&#xff0c;网易孵化了许多出圈的精品游戏&#xff0c;跻身成为全球七大游戏公司之一。这些游戏产品之所以能够广受玩家好评&#xff0c;并保持常青&#xff0c;一方面源于十年磨一剑的精良品质&#xff0c;另一方面则…

基于微信小程序的在线点餐系统【前后台+附源码+LW】

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 点餐小程序&#xff0c;主要的模块包括实现管理员&#xff1b;管理员用户&#xff0c;可以对整个系统进行基本的增删改查&#xff0c;系统的日…

一文详解:生产计划和排产管理怎么做?

通过阅读本文&#xff0c;你可以了解以下内容&#xff1a;1、生产计划的制定&#xff1b;2、排产的策略和方法&#xff1b;3、生产计划和排产管理实施&#xff1b;4、生产计划和排产管理的效果评估。 一、生产计划制定 生产计划的本质就是协调企业一切资源“低成本、高质量”…

“RLC串联正弦稳态电路的仿真研究”课程设计,高分资源,匠心制作,下载可用。强烈推荐!!!

1.设计目的 用 Multisim 电路仿真软件&#xff0c;对一个 RLC 串联电路进行正弦稳态电路分析。 2任务分析 2.1任务要求1 在 Multisim 中搭建一个 RLC 串联电路&#xff0c;其中 R、 L、 C、正弦激励源的振幅Vp和频率 f 等所有参数均可自己任意设置&#xff08;不建议都采用…

wordpress建站有哪些优点

对于绝大多数站长来说&#xff0c;使用wordpress建站是一个非常不错的选择。那么wordpress建站有哪些优点呢&#xff1f;下面小编就来为大家解答。 1.wordpress是什么&#xff1f; WordPress是一款全球最受欢迎的内容管理系统&#xff08;CMS&#xff09;&#xff0c;主要用于…

当前的网安行业绝对不是高薪行业

昨天&#xff0c;面试了一个刚毕业两年的同学小A。第一学历为某大专&#xff0c;第二学历为某省地区的本科院校。面试过程表现一般偏下&#xff0c;但动不动就要薪资15K 这个人&#xff0c;我当场就PASS了。主要原因是&#xff0c;并非是否定小A同学的能力&#xff0c;而是他…

小米上架遇到的隐私协议问题

1. 找到【APP权限设置】&#xff0c;点击详情&#xff0c;一一对照&#xff0c;删除没用的&#xff0c;新增小米商家必须要有的内容 2. APP 存在未经用户同意读取“OAID”的行为 uniapp官方文档对应内容处

薄冰英语语法学习--名词2-格

名词后面 s&#xff0c;代表后面这个东西属于前面的。 比如toms book&#xff0c;汤姆的书。 末尾是s&#xff0c;那么直接在最后加就行了。比如boys&#xff0c;男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

商家转账到零钱申请分销返佣场景直接过审方案

分销返佣场景是商家转账到零钱最常见的申请场景&#xff0c;驳回的主要原因是多级分销、代商家收款/二清、充值/消费/转赠等&#xff0c;本文整理了申请的详细步骤&#xff0c;并在最后给出了直接开通的办法。 申请步骤&#xff1a; 1. 确认主体资格&#xff1a;申请的商户号…

个人贷款种类(互联网最全)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;个人贷款种类 个人贷款概述 个人贷款是指个人向银行、金融机构或其他贷款机构借款用于个人消费、投资或其他目的的贷款产品。 个人贷款通常分为 secured loans&#xff08;抵押贷款&#xff09;和 unse…

SpringBoot集成IotDB

1、引入依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>0.14.0-preview1</version></dependency><dependency><groupId>cn.hutool</groupId><a…

【云原生】加强理解Pod资源控制器

Pod控制器 文章目录 Pod控制器一、Replication Controller&#xff08;RC&#xff09;1.1、什么是RC1.2、RC应用1.3、RC滚动更新 二、Replication Set&#xff08;RS&#xff09;2.1、什么是RS2.2、RS应用 三、Deployment3.1、什么是Deployment3.2、更新节奏和更新逻辑3.3、自定…

安科瑞APM520电能质量分析仪表-安科瑞 蒋静

1 电能质量分析用三相网络电力仪表概述 APM5 系列网络电力仪表&#xff08;以下简称仪表&#xff09;按 IEC 国际标准设计&#xff0c;具有全电量测量、电能统计、电能质 量分析&#xff08;包括谐波、间谐波、闪变&#xff09;、故障录波功能(包括电压暂升暂降中断、冲击电流…

C语言 | 文件操作(下)【必收藏】

文件操作&#xff08;下&#xff09; 5、文件的顺序读写5.1 顺序读写函数介绍5.1.1 fputc与fgetc5.1.2 fputs与fgets5.1.3 fprintf与fscanf5.1.4 fread与fwrite 5.2 对比一组函数 6. 文件的随机读写6.1 fseek6.2 ftell6.3 rewind 7. 文件读取结束的判定7.1 被错误使用的feof 8.…

SD教程:【AI创意】欧洲杯特别设计:SD机甲足球

使用Stable Diffusion&#xff08;SD&#xff09;为欧洲杯设计一款独特的机甲足球。这个创意项目将展示如何结合足球元素和机甲设计&#xff0c;创作出既符合体育精神又具有未来科技感的作品。无论是用于赛事宣传、纪念品设计还是艺术展示&#xff0c;这个设计都能吸引足球迷和…

正则表达式阅读理解

((max|min)\\s*\\([^\\)]*(,[^\\)]*)*\\)|[a-zA-Z][a-zA-Z0-9]*(_[a-zA-Z][a-zA-Z0-9]*)?(\\*||%)?|[0-9](\\.[0-9])?|\\([^\\)]*(,[^\\)]*)*\\))(\\s*[-*/%]\\s*([a-zA-Z][a-zA-Z0-9]*(_[a-zA-Z][a-zA-Z0-9]*)?(\\*||%)?|[0-9](\\.[0-9])?|\\([^\\)]*(,[^\\)]*)*\\)?|(…