接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头

2024-03-09 09:04

本文主要是介绍接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我要成为嵌入式高手之3月6日Linux高编第十六天!!
————————————————————————————

学习笔记

接收端

recvfrom

#include <sys/types.h>
#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);

功能:从套接字中接收数据

参数:

        sockfd:套接字文件描述符

        buf:存放数据空间首地址

        flags:属性,默认为0;

        src_addr:存放IP地址信息空间的首地址

        addrlen:存放接收到ip地址大小空间的首地址、

返回值:成功返回实际接收字节数,失败返回-1;

inet_ntoa

功能:将二进制转换为字符串

ntohs

功能:将大端字节序转换为本地字节序

#include "head.h"int main(void)
{int sockfd = 0;struct sockaddr_in recvaddr;struct sockaddr_in tmpaddr;char tmpbuff[1024] = {0};ssize_t nsize = 0;ssize_t nsize1 = 0;char recvbuff[1024] = {0};socklen_t recvbufflen;recvbufflen = sizeof(tmpaddr);fgets(tmpbuff, sizeof(tmpbuff), stdin);// while (1){/*创建用来通信的UDP套接字*/sockfd = socket(AF_INET, SOCK_DGRAM, 0);//通信使用的协议族(AF_INET是IPv4协议族),套接字类型:数据报套接字;默认0if (-1 == sockfd){perror("fail to socket");return -1;}/*对接收方地址赋值*/recvaddr.sin_family = AF_INET;recvaddr.sin_port = htons(50001);//本地字节序转换为网络的大端字节序recvaddr.sin_addr.s_addr = inet_addr("192.168.1.101");//函数接口inet_addr将字符串的ip地址转换为内存当中的IP地址//前面是ip地址转换为32位之后的变量名/*发送信息*/nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&recvaddr, sizeof(recvaddr));//0为发送的属性,默认为0,发送到哪里(那个空间的首地址),那个地方的空间大小if (-1 == nsize){perror("fail to sendto");return -1;}//printf("成功发送%ld字节!\n", nsize);/*接收信息*/nsize1 = recvfrom(sockfd, recvbuff, sizeof(recvbuff), 0, (struct sockaddr *)&tmpaddr, &recvbufflen);if (-1 == nsize1){perror("fail to recvform");return -1;}printf("RECV ASCII FROM %s:%d  %s\n", inet_ntoa(tmpaddr.sin_addr), ntohs(tmpaddr.sin_port), recvbuff);}close(sockfd);return 0;
}

bind

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

功能:在套接字绑定一个IP地址和端口号

参数:

        sockfd:套接字的文件描述符

        addr:绑定的IP地址空间的首地址

        addrlen:绑定IP地址的长度

返回值:成功0,失败-1;

UDP编程

发端:

        socket -> sendto -> close

收端:

        socket -> bind -> recvfrom -> close

发端:

#include "head.h"int main(void)
{int sockfd = 0;char tmpbuff[1024] = {0};struct sockaddr_in myaddr;struct sockaddr_in recvaddr;ssize_t nsize = 0;int ret = 0;sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sockfd){perror("fail to socket");return -1;}myaddr.sin_family = AF_INET;myaddr.sin_port = htons(54321);myaddr.sin_addr.s_addr = inet_addr("192.168.1.172");ret = bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));if (ret == -1){perror("fail to bind");return -1;}fgets(tmpbuff, sizeof(tmpbuff), stdin);recvaddr.sin_family = AF_INET;recvaddr.sin_port = htons(30000);recvaddr.sin_addr.s_addr = inet_addr("192.168.1.167");nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&recvaddr, sizeof(recvaddr));if (-1 == nsize){perror("fail to sendto");return -1;}printf("成功发送%ld字节数据\n", strlen(tmpbuff));close(sockfd);return 0;
}

收端:

#include "head.h"int main(void)
{int sockfd = 0;struct sockaddr_in myaddr;int ret = 0;size_t nsize = 0;char tmpbuff[1024] = {0};struct sockaddr_in sendaddr;socklen_t sendaddrlen;sendaddrlen = sizeof(sendaddr);   sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (-1 == sockfd){perror("fail to sockfd");return -1;}myaddr.sin_family = AF_INET;myaddr.sin_port = htons(33333);myaddr.sin_addr.s_addr = inet_addr("192.168.1.172");ret = bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));if (-1 == ret){perror("fail to bind");return -1;}nsize = recvfrom(sockfd, tmpbuff, sizeof(tmpbuff), 0, (struct sockaddr *)&sendaddr, &sendaddrlen);if (-1 == nsize){perror("fail to recvfrom");return -1;}printf("RECV ASCII FROM %s:%d  %s", inet_ntoa(sendaddr.sin_addr), ntohs(sendaddr.sin_port), tmpbuff);return 0;
}

练习:

编写程序实现两台主机间传输一个文件

UPD中需要注意的点

1、UDP是无连接的,发端退出收端没有任何影响

2、UDP发送数据上限,最好不要超过1500字节

3、UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失

wireshark

抓包工具

操作流程

        1、打开wireshrak

        2、选择抓取数据报的网卡(any)

        3、执行通信的代码

        4、停止通信

        5、设定过滤条件

                ip.addr == IP地址

                UDP\TCP\

                udp.port == 端口号

UDP包头

长度:8字节

源端口号(2字节)

目标端口号(2字节)

包长度(2字节)

校验和(2字节)

这篇关于接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790182

相关文章

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示