网络通信

WFP学习记录

狂风中的少年 提交于 2020-04-20 08:54:24
最近闲来无事,翻看wfp的资料,发现WFP真是好用,就是资料太稀少~好在有WDK的src目录和万能的搜索引擎. 后来发现 http://www.cnblogs.com/nevergone/archive/2013/04/05/3001765.html 挺不错的,于是就把那份代码给改了一下,做一个网络日志记录小程序. #ifndef __MAIN_H__ #define __MAIN_H__ #include <ntifs.h> #include <ip2string.h> #pragma warning(push) #pragma warning(disable: 4201) #pragma warning(disable: 4324) #include <fwpsk.h> #include <fwpmk.h> #pragma warning(pop) #define INITGUID #include <guiddef.h> // // Callout and sublayer GUIDs // DEFINE_GUID( SF_ALE_CONNECT_CALLOUT_V4, 0x76b743d4, 0x1249, 0x4610, 0xa6, 0x32, 0x6f, 0x9c, 0x4d, 0x08, 0xd2, 0x5a ); DEFINE_GUID( SF_ALE_RECV

网络通信之字节序转换原理与网络字节序、大端和小端模式

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-07 11:09:35
一、在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换。 原因如下: 网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。 小 端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络 协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如 果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是没有意义的,造成资源的浪费。 而不同平台进行通信时必须进行转换 ,不转换会造成错误的收发数据,字节序转换函数会根据当前平台的存储模式做出相应正确的转换, 如果当前平台是大端,则直接返回不进行转换,如果当前平台是小端,会将接收到得网络字节序进行转换。 二、大端和小端 "大端"和"小端"表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序; 或者说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端(即该值的起始地址),高位字节排放在内存的高地址端; 2.大端法(Big-Endian

Python网络通信UDP广播流程

末鹿安然 提交于 2019-11-26 15:19:36
1.导入套接字 from socket import * 2.创建UDP套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) 3.绑定地址和端口 dest = ("<broadcast>", 8080) 4.设置套接字选项 udp_socket.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) 5.发送广播数据 udp_socket.sendto("这是广播数据".encode("gb2312"), dest) 6.接收广播返回数据 (data, address) = udp_socket.recvfrom(2048) print("Recieve From %s : %s"%(address, data)) 来源: oschina 链接: https://my.oschina.net/u/2483040/blog/1556863