Wireshark 使用

设置过滤器 ip.sre == 192.168.1.104
显示过滤器
捕获过滤器

同时可以选择表达式 识别不同协议


最简单的网络包分析 ping

设置过滤器arp 点击开始抓包
时间是以开始抓包时刻记录
source 为发数据包源地址 并根据mac地址翻译厂商
info 大概就是谁是 101 我是104 ( ping 192.168.101)


通过应答知道了104的mac地址

并存入缓存中了


ICMP


windows ping 四次
看了下自己手机的ip 100 果然dest就是小米


icmp 会对消息进行checksum
TCP
无论哪一方向对端发送数据都必须先建立连接


从示例网站下载包
SampleCaptures · Wiki · Wireshark Foundation / wireshark · GitLab
查看telnet
基于tcp的三次握手

第一次
第二次
第三次
udp协议
众所周知tcp是面向连接的可靠的网络协议
udp是只管发送的不可靠的网络协议
那么学习就先从udp开始把
(25条消息) socket--Linux下的广播_入门到跑路的博客-CSDN博客
代码直接拷贝的这里了
先拿来主义在开始学hhh
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<errno.h>
#include<error.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
#include<unistd.h>
int main()
{
int fd;
struct sockaddr_in addr;
fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd < 0)
{
printf("socket error:%s\n",strerror(errno));
return -1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = inet_addr("192.168.10.255");
int broad_flag = 1;
setsockopt(fd,SOL_SOCKET,SO_BROADCAST, &broad_flag,sizeof(int));
char *str = "hello world!";
while(1)
{
int ret = sendto(fd,str, strlen(str)+1,0,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
if(ret < 0)
{
printf("sendto error:%s\n",strerror(errno));
break;
}
printf("sendto ok!\n");
sleep(1);
}
close(fd);
return 0;
}
大概就是设置ip 不停的向外广播helloworld
先跑起来然后再来慢慢理解
运行然后我们打开wireshark


追踪下流可以看到广播的消息

这里的Ethernet II 代表的以太网协议帧
Internet Protocol 代表的Internet协议
user data protocol 欸这里 就可以猜到是udp协议了
可以看到对应的网络的七层模型的数据链路层 网络层 传输层


先预习一波把

低地址放在大位就是大段
1字节序

发送数据永远都是低地址先出去 所以需要区分大段小段
但是socket不区分
而是分为主机字节序 和网络字节序
_to_

2.对齐

12 char
编译器对齐结构体 为了减少取值周期
address/sizeof 32bit 4个字节
5/4 6/4 7/4

解决方式 :不对齐
3.类型长度问题
char 有无符号 int 长度 %d显示有符号
解决:统用类型 int32_t uint32_t int8_t uint8_t
AF 协议族 ipv4可以支持 udp tcp ..
为了统一不同的网路协议 抽象出的套接字 就是文件描述符
可以封装到流中。。一切接文件

协议族 某一个protcol 实现这个中type类型的传输
实现的type类型
流:只要接受到包 一定确保包是正确的 点对点一对一 【封装管道】


流式套接字 简单一些 以字节流为单位
报socket

被动先运行 因为要收消息
并且被动收东西 所以不能省略socket地址
必须先告诉人家我是哪个ip哪个端口

不用对齐 而且确定大小位数
端口应该使用1024以上

1:

2:
这里的sockaddr是一个抽象的结构体 因为其类型取决于用的什么协议族


注意这里由于是接受端 所以本机的ip 和端口确定好
还要给对方发过去 所以端口也要转化为网络字节序

3.

re


浙公网安备 33010602011771号