计算机网络学习实战篇——实现网络嗅探工具

实现功能

在计算机里捕获IP协议报文、UDP协议报文、TCP协议报文,并分析报文里的关键信息。

流程

在这里插入图片描述

搭建服务基本框架

基于操作系统的线程池实现。
链接:操作系统学习实战篇——实现支持异步任务的线程池

在这里插入图片描述

网卡的工作模式
在这里插入图片描述
本文将网卡设置成混杂模式

server.py

# -*- encoding=utf-8 -*-

import socket
import json
from 计算机操作系统.pool import ThreadPool as tp
from 计算机操作系统.task import AsyncTask


class ProcessTask(AsyncTask):
    def __init__(self,packet,*args,**kwargs):
        self.packet = packet
        AsyncTask(func=self.process,*args,**kwargs)
        pass

    def process(self):
        pass


class Server:
    def __init__(self):
        # 工作协议类型、套接字类型、工作具体的协议
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
        # 套接字绑定到具体端口
        # 自己的主机IP,在终端通过 ipconfig 命令查看
        self.ip = '192.168.1.105'
        self.port = 8888
        self.sock.bind((self.ip, self.port))

        # 混杂模式
        self.sock.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
        # 定义线程池,线程数量10个
        self.pool = tp(10)
        self.pool.start()

    def loop_server(self):
        while True:
            # 1. 接收
            packet, addr = self.sock.recv(65535)
            # 2. 生成Task
            task = ProcessTask(packet)
            # 3. 提交
            self.pool.put(task)
            # 4. 获取结果
            result = task.get_result()
            result = json.dumps(
                result,
                indent=4
            )
            print(result)


if __name__=='__main__':
    server = Server()
    server.loop_server()

Python操作字节序列

字节序:
在这里插入图片描述大端字节序:高位字节在前,低位字节在后
小端字节序:低位字节在前,高位字节在后

由于计算机电路先处理低位字节效率比较高,主机的CPU处理时会按照小端字节序处理,但是呈现出来是大端字节序的形式。
而人类习惯读写大端字节序,所以网络中使用的是大端字节序。

在这里插入图片描述在这里插入图片描述
struct_demo.py

# -*- encoding=utf-8 -*-

import struct

# 八个字节
bin_str = b'ABCD1234'
print(bin_str)

# B 一个字节转换为一个整数
# >表示大端字节序
result = struct.unpack('>BBBBBBBB', bin_str)
print(result)

# H 两个字节转换为一个整数
result = struct.unpack('>HHHH', bin_str)
print(result)

# L 四个字节转换为一个整数
result = struct.unpack(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值