计算机网络通信--报文解析


PING rquest 一共74个字节
[Eth报文]---------------------------------------
48 b0 2d 15 fa 17 e0 be 03 14 f7 85             /// 目标MAC地址(6),源MAC地址(6)
08 00                                           /// 帧类型(或者长度)
[IP报文]----------------------------------------
45 00   
00 3c                                           /// IP报文长度
00 b6                                           /// IP标识(2), 
00 00                                           /// 标志(3b), 片偏移13b
40 01                                           /// 生存时间(1),协议类型(1) 01 - ICMP
00 00                                           /// IP首部校验和
c0 a8 0a 96 c0 a8 0a 9b                         /// 源IP地址,目标IP地址(没有IP选项字段)
[ICMP报文]--------------------------------------
08 00 4c cf                                     /// type = 08 表示PING请求,code = 0
00 01                                           /// 标识符
00 8c                                           /// 序列号(发送时递增)
61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 /// ICMP选项(每种操作系统的发送的值不太一样)
71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69
================================================

PING reply 也是74个字节
[Eth报文]---------------------------------------
e0 be 03 14 f7 85 48 b0 2d 15 fa 17 
08 00 
[IP报文]----------------------------------------
45 00
00 3c 
1d 2c 
00 00 
40 01 
c7 13 
c0 a8 0a 9b c0 a8 0a 96 
[ICMP报文]--------------------------------------
00 00                                            /// type = 00 表示PING回应,code = 0
54 cf                                            /// 校验和
00 01                                            /// 标识符(与发送一致)
00 8c                                            /// 序列号(与发送一致)
61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  /// ICMP选项(与发送一致)
71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69                  

UDP报文格式:

[Eth报文]---------------------------------------
48 b0 2d 15 fa 17 e0 be 03 14 f7 85 08 00 
[IP报文]----------------------------------------
45 00
00 26 3d d5 00 00 40 11 00 00 c0 a8 0a 96 c0 a8
0a 9b 
[UDP报文]--------------------------------------
27 0f                                           /// 源端口
15 b3                                           /// 目标端口
00 12                                           /// 包长度(包含IP首部)
96 a5                                           /// 校验和
30 31 32 33 34 35 36 37 38 39                   /// 数据  

ARP报文:

[Eth报文]---------------------------------------
ff ff ff ff ff ff 4c ef 56 07 2d 8c
08 06 /// 帧类型 0806 - ARP
[ARP报文]---------------------------------------
00 01 /// 硬件类型
08 00 /// 协议类型
06 04 /// 硬件地址长度,协议地址长度
00 01 /// 操作类型
4c ef 56 07 2d 8c /// 发送方MAC地址
c0 a8 0a 01 /// 发送方IP地址
00 00 00 00 00 00 /// 目标MAC地址(因为不知道,所以才问的)
c0 a8 0b fe /// 目标IP地址
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

- 阅读全文 -

WireShark使用说明


指定协议: ICMP/TCP/UDP/ARP/SSH

ip.proto==ICMP

或者直接: icmp/udp/tcp/arp


指定IP地址:

ip.src  == 192.168.10.150
ip.dst  == 192.168.10.150
ip.addr == 192.168.10.150

指定MAC地址:

eth.addr == e0:be:03:14:f7:85
eth.src  == e0:be:03:14:f7:85
eth.dst  == e0:be:03:14:f7:85

src - 源地址,
dst - 目标地址,
addr - 源地址或目标地址其中一个匹配即可


指定Eth帧类型: eth.type == 0x0800

指定UDP报文长度:(长度包含了UDP报文头) udp.length > 20

指定端口:

udp.port == 5555
tcp.port == 5555
udp.srcport == 5555
udp.dstport == 5555    
tcp.srcport == 5555
tcp.dstport == 5555

取反操作: not

udp && not dns && not mdns && not ssdp && not llmnr && not nbns && not wsp

- 阅读全文 -

AI视觉算法--v4l2工具应用


安装工具:

apt-get install v4l-utils

查看系统设备列表

$ v4l2-ctl --list-devices
UVC Camera (usb-70090000.xusb-2.1):
        /dev/video0

查看摄像机支持的格式:

v4l2-ctl -d0 --list-formats-ext

-d0 指定设备相当于 --device=/dev/video0


查看可以设置的参数列表:

$ v4l2-ctl --device=/dev/video0 --list-ctrls
                     brightness 0x00980900 (int)    : min=0 max=100 step=1 default=50 value=50
                       contrast 0x00980901 (int)    : min=0 max=100 step=1 default=50 value=50
                     saturation 0x00980902 (int)    : min=0 max=100 step=1 default=50 value=50
                            hue 0x00980903 (int)    : min=0 max=100 step=1 default=50 value=50
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=0

brightness - 亮度
contrast - 对比度
saturation - 饱和度
hue - 色调

设置参数:

$ v4l2-ctl ---device=/dev/video0 --set-ctrl brightness=50

$ v4l2-ctl -d0 -c brightness=50

- 阅读全文 -

AI视频处理--gstreamer应用程序接口


Makefile:

LDFLAGS +=`pkg-config --libs gstreamer-1.0`
CFLAGS  +=`pkg-config --cflags gstreamer-1.0`
# 展开项    
# -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 
# -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include   

gst_info: gst_info.c
        gcc -o $@ $^  ${LDFLAGS} ${CFLAGS} 

- 阅读全文 -

CUDA编程--建立工程


硬件平台: Jetson NX (aarch64)
操作系统: Ubuntu18.04
软件版本: Qt5(qt5-default),cuda-10.2(安装位置:/usr/local/cuda-10.2/)


QT5工程:

新建一个简单的cu文件: kernel.cu

#include "cuda_runtime.h"
#include <stdio.h>
__global__ void hellofromGPU(void)
{
    printf("GPU %d: Hello World %d\r\n", blockIdx.x, threadIdx.x);
}

/// cpp文件不能直接调用设备函数,需要通过cu中的函数导出
void gpu_show(void)
{
    hellofromGPU<<<10, 2>>>();
    cudaDeviceSynchronize();
}

新建QT工程: 修改工程文件(.pro),添加以下内容

# cu源文件列表
CUDA_SOURCES +=  kernel.cu
    
# 指定cuda编译器安装的位置
CUDA_DIR      = "/usr/local/cuda-10.2"
SYSTEM_NAME   = aarch64
SYSTEM_TYPE   = 64
MVCC_OPTIONS  =--use_fast_math    

QMAKE_LIBDIR += $$CUDA/lib64
CUDA_OBJECTS_DIR = ./

CUDA_LIBS = -lcudart -lcufft
# 添加头文件路径
INCLUDEPATH  += $$CUDA_DIR/include       
# 添加-I -l前缀(具体没看懂)
CUDA_INC  = $$join(INCLUDEPATH,'" -I"','-I"','"')
#NVCC_LIBS = $$join(CUDA_LIBS, ' -l','-l','')        
#--------------------------------------------
# 前边的都是宏定义,这里才是重点
# 指定源文件的位置 
cuda.input = CUDA_SOURCES
# 指定输入目标文件
cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
# 编译命令(编译选项)
cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$CUDA_LIBS -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda.dependency_type= TYPE_C

# 指定扩展的编译器(重要)
QMAKE_EXTRA_COMPILERS += cuda

# 添加链接库(链接时用,需要与CUDA_LIB一致)
LIBS += -L"/usr/local/cuda-10.2/lib64/" $$CUDA_LIB   

main函数示例:

extern void gpu_show(void);
int main(int argc, char *argv[])
{
    printf("CPU: HelloWorld\r\n");
    gpu_show();    // 调用GPU显示程序
    return 0;
}

编译工程:直接点击编译即可


运行结果:

CPU: HelloWorld
GPU 5: Hello World 0
GPU 5: Hello World 1
GPU 3: Hello World 0
GPU 3: Hello World 1
GPU 4: Hello World 0
GPU 4: Hello World 1
GPU 2: Hello World 0
GPU 2: Hello World 1
GPU 0: Hello World 0
GPU 0: Hello World 1
GPU 1: Hello World 0
GPU 1: Hello World 1
GPU 8: Hello World 0
GPU 8: Hello World 1
GPU 9: Hello World 0
GPU 9: Hello World 1
GPU 7: Hello World 0
GPU 7: Hello World 1
GPU 6: Hello World 0
GPU 6: Hello World 1

gcc工程:

Makefile

cuda: device.o main.o
    g++ -o cuda $^ -L/usr/local/cuda-10.2/lib64/ -lcudart -lcufft
    # nvcc -o cuda  $^

device.o:device.cu
    nvcc -c $^

main.o:main.c
    g++ -c $^

clean:
    rm -rf *.o

- 阅读全文 -


Copyright©2024 春天花会开, All Rights Reserved. Email: webmaster@oroct.com