#coding=utf-8
'''
1.
真正从网卡进来的数据是完整的以太网帧,底层用sk_buff 数据结构描述,最终进入接收缓冲区recv buffer,
而我们应用层调用read / recv /recvfrom 从接收缓冲区拷贝数据到应用层提供的buffer,对一般的套接字,
如SOCK_STREAM, SOCK_DGRAM 来说,此时缓冲区只有user data,其他各层的头部已经被去除,而对于SOCK_RAW
来说是IP head + IP payload,当然也可以是arp/rarp 包,甚至是完整的帧(加上MAC头)。
2.
setsockopt(level,optname,value)
level定义了哪个选项将被使用。通常情况下是SOL_SOCKET,意思是正在使用的socket选项。
它还可以通过设置一个特殊协议号码来设置协议选项,然而对于一个给定的操作系统,大多数协议选项都是明确的,
所以为了简便,它们很少用于为移动设备设计的应用程序。optname参数提供使用的特殊选项。关于可用选项的设置,会因为操作系统的不同而有少许不同。
'''
import socket
import threading
import os,struct,re
from ctypes import *
Host="192.168.43.73"
class IP(Structure):
_fields_=[
("ihl&#
'''
1.
真正从网卡进来的数据是完整的以太网帧,底层用sk_buff 数据结构描述,最终进入接收缓冲区recv buffer,
而我们应用层调用read / recv /recvfrom 从接收缓冲区拷贝数据到应用层提供的buffer,对一般的套接字,
如SOCK_STREAM, SOCK_DGRAM 来说,此时缓冲区只有user data,其他各层的头部已经被去除,而对于SOCK_RAW
来说是IP head + IP payload,当然也可以是arp/rarp 包,甚至是完整的帧(加上MAC头)。
2.
setsockopt(level,optname,value)
level定义了哪个选项将被使用。通常情况下是SOL_SOCKET,意思是正在使用的socket选项。
它还可以通过设置一个特殊协议号码来设置协议选项,然而对于一个给定的操作系统,大多数协议选项都是明确的,
所以为了简便,它们很少用于为移动设备设计的应用程序。optname参数提供使用的特殊选项。关于可用选项的设置,会因为操作系统的不同而有少许不同。
'''
import socket
import threading
import os,struct,re
from ctypes import *
Host="192.168.43.73"
class IP(Structure):
_fields_=[
("ihl&#