#原始套接字

一、TCP、UDP回顾

1.1 TCP、UDP开发回顾

UDP:

 数据报式套接字(SOCK_DGRAM)

        1、无连接的socket,针对无连接的UDP服务

        2、可以通过邮件模型来进行对比

(不保证可靠,但是传输效率高,速度快)

TCP:

流式套接字(SOCK_STREAM)

        1、面向连接的socket,针对面向连接的TCP服务

        2、可通过电话模型来进行对比

连接时:三次握手;退出时:四次挥手

这两类套接字似乎涵盖了TCP/IP应用的全部

TCP与UDP各自有独立的port互不影响

一个进程可同时拥有多个port

不必关心TCP/IP协议实现的过程

UDP:

TCP:

二、原始套接字概述、创建

2.1 原始套接字概述

2.2 创建原始套接字

注意:原始套接字运行时需要加权限 sudo

三、数据包详解

3.1 组装/拆解UDP数据包流程

 

3.2 UDP封包格式

UDP报头:(八个字节)

1、源头口号:发送端口号

2、目的端口号:接收方端口

3、长度:UDP用户数据报的长度,最小值是8(仅有首部)

4、校验和:监测UDP用户数据报在传输中是否有错,有错就丢弃

3.3 IP封包格式

3.4 Ethernet 封包格式:

MAC头部:

注意:ip数据报(0x0800)、ARP数据报(0x0806)、RARP(0x8035)

数据根据类型来决定

3.5 TCP封包格式

TCP报头:

3.6 ICMP封包格式

ICMP协议用来实现监测两台主机是否能够通信

四、编程实例——分析MAC数据包

4.1 链路层数据格式

五、练习——网络数据分析器

        对网络上的数据进行抓取,然后进行分析,此“网络数据分析器”就是模仿显示开发中的抓包工具而进行的。

5.1 网络数据分析图

5.2 ARP数据分析图

说明:

        1、ARP的TYPE为0x0806

        2、buf为unsigned char

        3、所有数据均为大端

5.3 IP数据报

说明:

        1、ARP的TYPE为0x0800

        2、buf为unsigned char

        3、所有数据均为大端

5.4 代码讲解以及混杂模式

5.4.1 要求

        1、分析出ARP/IP/RARP

        2、分析出MAC

扩展:

        在完成基本要求的前提下,分析port

提示:

        以root权限运行

5.4.2 代码讲解

接收一个数据报,并分析:

结果:

5.4.3 混杂模式

     

六、sendto发送数据

6.1 用sendto发送原始套接字数据

sendto( sock_raw_fd , msg , msg_len , 0 ,(struct sockaddr*)& sll , sizeof( sll ));
注意:
        1、sock_raw_fd:原始套接字
        2、msg:发送的消息
        3、sll:本机网络接口,指发送的数据应该从本机的那个网卡出去,而不是以前的目的地址

6.2 本机网络接口

只需要对 sll.sll_ifindex 赋值,就可使用

6.3 发送数据demo

sll.sll_ifindex = 当前要出去的网络接口地址

6.4 通过ioctl来过去网络接口地

int ioctl(int fd, int request,void *)
#include <sys/ioctl.h>

七、练习——MAC地址扫描器(ARP)

7.1 概述

ARP Address Resolution Protocol ,地址解析协议)
1 、是 TCP/IP 协议族中的一个
2 、主要用于查询指定 ip 所对应的的 MAC
3 、请求方使用广播来发送请求
4 、应答方使用单播来回送数据
5 、为了在发送数据的时候提高效率在计算中会有一个 ARP 缓存表,用来暂时存放 ip 所对应的       MAC ,在 linux
中使用 ARP 即可查看 , xp 中使用 ARP -a

7.2 在Linux和Windows查看系统ARP表方式

Linux下:

Windows:

注意:当主机A与B通信时 会先查看表中有没有对方的mac地址,有则直接通信即可,没有的话再调用arp协议获取对方的mac地址并将其保存在arp表中

7.3 ARP协议格式

7.4 想指定IP发送ARP请求(demo)

通过对方的ip地址获取对方的mac地址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值