##现象:
当我使用raw_socket 进行tcp包处理时,服务端接收到 SYN请求时,立即回复了RST。
##原因:
raw_socket 接收到的SYN包,linux 协议栈同样会接收到,然而内核协议栈 会立刻回复RST,因为内核协议栈,检测到SYN目的端口无人监听。
##问1:
是否有方法让内核不处理,或接收不到此SYN?
##问2:
链路层raw_socket在发送ip包时,如何获取目的mac。(不想自己维护arp,是否有获取系统arp表的接口?)
##我使用的socket:
###创建rawsocket:
fd = socket(**PF_PACKET**,**SOCK_RAW**, htons(ETH_P_ALL));
创建链路层rawsocket
###从rawsocket接收数据
|mac|ip|tcp|data|
recvfrom(fd, data, len, 0, (struct sockaddr*)&sa, sizeof(sa));
接收数据包含链路层头
###使用rawsocket发送数据
|mac|ip|tcp|data|
sendto(fd, data, len, 0, (struct sockaddr*)&sa, sizeof(sa));
发送数据同样包含链路层头