粘包,Telnet,SSH,Wireshark

embedded/2024/9/20 1:37:04/ 标签: ssh, wireshark, 网络

一,粘包

        原因:tcp为流式套接字,数据与数据间没有边界,导致多次数据粘到一起。

        解决:

                1.规定一些数据间的间隔符,"\aa","\r\n";

                2.可以指定要发送对象的数据长度。

                3.自己将数据打包。

1.上传接收粘连

        1.用户端

        

#include <head.h>int connect_server(const char *ip,const char *port)
{int fd = socket(AF_INET,SOCK_STREAM,0);if (fd < 0)handle_error_ret("socket fail");struct sockaddr_in seraddr;memset(&seraddr,0,sizeof(seraddr));seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = inet_addr(ip);seraddr.sin_port = htons(atoi(port));//"50000"  if (connect(fd,(const struct sockaddr *)&seraddr,sizeof(seraddr)) < 0)handle_error_ret("connect_server fail");return fd;
}//./cli 127.0.0.1 50000 filename 
int main(int argc, const char *argv[])
{if (argc != 4){printf("usage: %s <ip> <port> <filename>\n",argv[0]);return -1;}int fd = connect_server(argv[1],argv[2]);if (fd < 0)return -1;int fd_s = open(argv[3],O_RDONLY);if (fd_s < 0)handle_error_ret("open fail");write(fd,argv[3],strlen(argv[3])+1);
//	write(fd,argv[3],strlen(argv[3]));char buf[100] = {0};int ret = 0;while (1){ret = read(fd_s,buf,sizeof(buf));if (ret == 0)break;write(fd,buf,ret);}close(fd_s);close(fd);return 0;
}

2.服务器

#include <head.h>int init_server(const char *ip,const char *port)
{int fd = socket(AF_INET,SOCK_STREAM,0);if (fd < 0)handle_error_ret("socket fail");struct sockaddr_in seraddr;memset(&seraddr,0,sizeof(seraddr));seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = inet_addr(ip);seraddr.sin_port = htons(atoi(port));//"50000"  if (bind(fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)handle_error_ret("bind fail");if (listen(fd,5) < 0)handle_error_ret("listen fail");return fd;}//./ser 127.0.0.1 50000 
int main(int argc, const char *argv[])
{int ret = 0;if (argc != 3){printf("Usage: %s <ip> <port>\n",argv[0]);return -1;}int listenfd = init_server(argv[1],argv[2]);if (listenfd < 0)return -1;int connfd = 0;if ((connfd = accept(listenfd,NULL,NULL)) < 0)handle_error_ret("accept fail");//读文件名 char buf[100] = {0};ret = read(connfd,buf,sizeof(buf));printf("ret = %d buf = %s\n",ret, buf);int fd_d = open(buf,O_WRONLY|O_CREAT|O_TRUNC,0666);if (fd_d < 0)handle_error_ret("open fail");while (1){ret = read(connfd,buf,sizeof(buf));printf("ret = %d buf1 = %s \n",ret,buf);if (ret == 0)break;write(fd_d,buf,ret);}close(fd_d);close(connfd);return 0;
}

3.注意

服务器和客户端不能写在同级别文件夹中

2.解决粘连

1.客户端

#include <head.h>int connect_server(const char *ip,const char *port)
{int fd = socket(AF_INET,SOCK_STREAM,0);if (fd < 0)handle_error_ret("socket fail");struct sockaddr_in seraddr;memset(&seraddr,0,sizeof(seraddr));seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = inet_addr(ip);seraddr.sin_port = htons(atoi(port));//"50000"  if (connect(fd,(const struct sockaddr *)&seraddr,sizeof(seraddr)) < 0)handle_error_ret("connect_server fail");return fd;
}//./cli 127.0.0.1 50000 filename 
int main(int argc, const char *argv[])
{if (argc != 4){printf("usage: %s <ip> <port> <filename>\n",argv[0]);return -1;}int fd = connect_server(argv[1],argv[2]);if (fd < 0)return -1;int fd_s = open(argv[3],O_RDONLY);if (fd_s < 0)handle_error_ret("open fail");//write(fd,argv[3],strlen(argv[3])+1);write(fd,argv[3],strlen(argv[3]));//方式1 //sleep(1);//方式2 write(fd,"\r\n",2);char buf[100] = {0};int ret = 0;while (1){ret = read(fd_s,buf,sizeof(buf));if (ret == 0)break;write(fd,buf,ret);}close(fd_s);close(fd);return 0;
}

2.服务器

#include <head.h>int init_server(const char *ip,const char *port)
{int fd = socket(AF_INET,SOCK_STREAM,0);if (fd < 0)handle_error_ret("socket fail");struct sockaddr_in seraddr;memset(&seraddr,0,sizeof(seraddr));seraddr.sin_family = AF_INET;seraddr.sin_addr.s_addr = inet_addr(ip);seraddr.sin_port = htons(atoi(port));//"50000"  if (bind(fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)handle_error_ret("bind fail");if (listen(fd,5) < 0)handle_error_ret("listen fail");return fd;}//./ser 127.0.0.1 50000 
int main(int argc, const char *argv[])
{int ret = 0;if (argc != 3){printf("Usage: %s <ip> <port>\n",argv[0]);return -1;}int listenfd = init_server(argv[1],argv[2]);if (listenfd < 0)return -1;int connfd = 0;if ((connfd = accept(listenfd,NULL,NULL)) < 0)handle_error_ret("accept fail");//读文件名 char buf[100] = {0};FILE *fp = fdopen(connfd,"r");if (fp == NULL)handle_error_ret("fdopen fail");fgets(buf,sizeof(buf),fp);  //buf => 1.txt\r\nbuf[strlen(buf)-2] = '\0';//	ret = read(connfd,buf,sizeof(buf));
//	printf("ret = %d buf = %s\n",ret, buf);printf("buf = %s\n",buf);int fd_d = open(buf,O_WRONLY|O_CREAT|O_TRUNC,0666);if (fd_d < 0)handle_error_ret("open fail");while (1){//ret = read(connfd,buf,sizeof(buf));ret = fread(buf,1,sizeof(buf),fp);printf("ret = %d buf1 = %s \n",ret,buf);if (ret == 0)break;write(fd_d,buf,ret);}close(fd_d);close(connfd);return 0;
}

3.recv send函数(仅用于TCP中)

2.

1.recv 类似于read函数

用法

比read函数多一个参数,仅用于TCP中

2.send 类似于write函数

send recv函数最后一个参数即允许非阻塞操作。

二,telnet,SSH,wireshark

1.telent

1.在windows中

telent可以在windows上用cmd创建一个linux,需要在linux中用ifconfig查看ip地址即可

linux IP为 192.168.11.128

2.第三方软件

以他实例

选择Telnet,输入IP

2.SSH

功能与telnet类似,只是传输过程加密

3.wireshark 抓包工具 抓取网络上数据

1.抓取telnet

输入指令打开

红色输入蓝色输出

2.抓取SSH 

加密了

三次招手与四次挥手

3.wireshark中的命令


http://www.ppmy.cn/embedded/99638.html

相关文章

38-java代码可以实现一次编写 到处运行

Java的“一次编写到处运行”是指&#xff0c;编写的Java代码可以在任何支持Java的操作系统上运行&#xff0c;这是因为Java有一个称为Java Virtual Machine&#xff08;JVM&#xff09;的虚拟机&#xff0c;它负责将Java代码转换成特定于操作系统的机器指令。只要你有支持Java的…

Mac 安装 Homebrew

一、Homebrew 简介 官网地址&#xff1a;https://brew.sh/zh-cn/ 是什么 Homebrew 是一款 Mac OS 平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等很多实用的功能。 简单的一条指令&#xff0c;就可以实现包管理&#xff0c;而不用你关心各种依赖和文…

哈希表相关内容

基础知识 哈希表最大的优点是高效&#xff0c;在哈希表中插入、删除或查找一个元素都只需要O(1)的时间&#xff0c;在java中哈希表有两个对应的类型&#xff0c;即HashSet和HashMap。HashSet常用函数 序号函数函数功能1add在HashSet中添加一个元素2contains判断HashSet中是否包…

【题解】【结构体排序】—— [NOIP2009 普及组] 分数线划定

【题解】【结构体排序】—— [NOIP2009 普及组] 分数线划定 [NOIP2009 普及组] 分数线划定题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.题意解析2.AC代码 [NOIP2009 普及组] 分数线划定 戳我查看题目&#xff08;洛谷&#xff09; 题目描述 世博会志愿者的选…

【学习笔记】8、脉冲波形的变换与产生

本章简略记录。 8.1 单稳态触发器&#xff08;脉冲触发&#xff09; 单稳态触发器 应用于 &#xff1a;&#xff08;1&#xff09;脉冲整型&#xff08;2&#xff09;脉冲延时 &#xff08;3&#xff09;定时 单稳态触发器的工作特性&#xff1a; 没有触发脉冲作用时&#xf…

成为一名厉害的黑客,必须知道的12个步骤,黑客入门

黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统、编程语言和操作系统知识&#xff0c;并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客&#xff0c;下…

ROS 2核心要点

关于ROS 2&#xff08;Robot Operating System 2&#xff09;的详细介绍&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、概述 ROS 2是机器人操作系统&#xff08;Robot Operating System&#xff09;的第二代版本&#xff0c;它是ROS 1的升级版本&#xff0c;旨在解…

二叉树中序迭代遍历python

# 中序遍历-迭代-LC94_二叉树的中序遍历 class Solution:def inorderTraversal(self, root: TreeNode) -> List[int]:if not root:return []stack [] # 不能提前将root结点加入stack中result []cur rootwhile cur or stack:# 先迭代访问最底层的左子树结点if cur: s…

python 简易应用: 一键完成!将ios 的heic图片批量转为jpeg(二)

上一帖本来是打算用一个python脚本完成的 &#xff0c;但是pyheif依赖安装没搞定&#xff0c;总是出错&#xff0c;因此折衷用了两步&#xff1a;&#xff11;。先用py脚本处理 &#xff12;。再通过批处理调用imagemagick来实现&#xff0c;基本上也是一键完成&#xff0c; 只…

使用VRoid Studio二次元建模,创建专属于自己的二次元卡通人物模型,创建完全免费开源且属于自己VRM模型

最终效果 文章目录 最终效果什么是VRoid Studio官网地址下载安装VRoid Studio1、可以去它的官网下载2、steam安装 创建模型配置参数 导出模型使用别人的VRM模型这里我分享几个不错的模型&#xff0c;大家可以自行去下载 完结 什么是VRoid Studio 如果你玩过能捏脸的游戏你就能…

Linux buffer/cache

清除方法 echo 1 > /proc/sys/vm/drop_caches # 仅清除页面缓存 echo 2 > /proc/sys/vm/drop_caches # 清除目录项和inode echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及inode 下面了解一下这几种都是什么,简单理解&#xff0c;目录项和inode&…

[Python可视化]空气污染物浓度地图可视化

[Python可视化]空气污染物浓度地图可视化&#xff0c;果然是路边浓度最大 在本篇文章中&#xff0c;我将展示如何使用 Python 结合 OSMnx、NetworkX 和 GeoPandas 等库&#xff0c;计算给定路径的最短路线&#xff0c;并基于该路径穿过的网格单元计算总污染量。最终&#xff0c…

(第三十三天)

1. 设置主从从 mysql57 服务器 &#xff08; 1 &#xff09;配置主数据库 [rootmsater_5 ~] # systemctl stop filewalld [rootmsater_5 ~] # setenforce 0 [rootmsater_5 ~] # systemctl disable filewalld [rootmsater_5 ~] # ls anaconda-ks.cfg mysql-5.7.44-linux-g…

餐厅点餐系统

TOC springboot0742餐厅点餐系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数…

【笔记】0基础python学爬虫(未完)

&#xff08;一&#xff09;用requests发送get请求 安装好pycharm&#xff08;跳过&#xff09; 在本地控制台输入pip install requests 安装requests模块 with防止资源浪费 不论f文件有没有执行成功最后都会关闭 请求获取url resp requests.get(url) resp.text获取源代码…

Logstash Docker 部署 安装 logstash-output-jdbc

Logstash Docker 部署 安装 logstash-output-jdbc 前置步骤参考&#xff1a;https://blog.csdn.net/weixin_44121790/article/details/141305720 问题&#xff1a; 今天使用docker 部署logstash&#xff0c;遇到无法运行的问题&#xff0c;原因是因为配置问题使用了 logstas…

2024网络安全学习路线 非常详细 推荐学习

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#…

EKS开源系列之XF_UTILS工具库

EKS开源系列之XF_UTILS工具库 为啥要写这个中间件这个中间件的特色xf_utils 有那些功能文件夹结构xf_utils API 有哪些xf_checkxf_lockxf_stdxf_utils_logxf_commonxf_attributexf_bit_defsxf_errxf_listxf_predefxf_version 开源链接移植教程 为啥要写这个中间件 当我们开发软…

支持redis和zookeeper的分布式锁组件lock4j

Lock4j是一个基于Spring AOP的分布式锁组件&#xff0c;它提供了多种底层实现&#xff08;如RedisTemplate、Redisson、Zookeeper&#xff09;以满足不同性能和环境的需求。 开源地址&#xff1a;GitHub - baomidou/lock4j: 基于Spring AOP 的声明式和编程式分布式锁&#xff…

Vue 2 项目升级到 Vue 3 操作手册

引言 Vue 3 是 Vue.js 框架的重大版本更新&#xff0c;引入了许多新特性和性能改进。本文将详细介绍如何将一个现有的 Vue 2 项目逐步升级到 Vue 3&#xff0c;并提供具体的步骤和示例代码。 1. Vue 3 的新特性 在开始升级之前&#xff0c;让我们先了解一下 Vue 3 中的一些重…