原始套接字编程----简单的发送SYNtcp数据
来源:互联网 发布:name域名续费优惠码 编辑:程序博客网 时间:2024/06/07 06:14
1、首先要明白的是:你发送的TCP数据到底是怎样构造的吧?
2、TCP数据报的构成方式:
这是TCP头部-------如果无TCP的选项其头部大小为20个字节;
3、下面要明白IP头部的大小:
4、构造头部:
ip 头部:
struct ip * ip=calloc(1, sizeof(struct ip));
ip->ip_dst.s_addr=inet_addr(dst);
ip->ip_src.s_addr=inet_addr(src);
ip->ip_hl=sizeof(struct ip)/4;
ip->ip_sum=0;
ip->ip_v=IPVERSION;
ip->ip_tos=0;
ip->ip_ttl=MAXTTL;
ip->ip_len=sizeof(struct ip)+sizeof(struct tcphdr)+len;
ip->ip_off=0;
ip->ip_id=0;
ip->ip_sum=0;
ip->ip_p=IPPROTO_TCP;
构造tco头部:
struct tcphdr * tcp=calloc(1, sizeof(struct tcphdr));
tcp->th_dport=htons(det_port);
tcp->th_sport=htons(det_port);
tcp->th_off=sizeof(struct tcphdr)/4;
tcp->th_win=htons(4096);
tcp->th_sum=0;
tcp->th_flags=TH_ACK;
/*
BSD内核
*/
具体查看 /usr/include/netinet/ip.h 与tcp.h
4、 具体就是一个构造一个发送的空间:
sockfd=socket(PF_INET,SOCK_RAW,IPPROTO_TCP);
if(sockfd<0)
{
err_quit("socket", sockfd);
}
if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on, sizeof(on))==-1)
{
err_quit("setsocket", -2);
}
5、最后就是利用SENDTo 函数发出-
num=sendto(sockfd,final_data,strlen(final_data),0,(struct sockaddr*)&server,sizeof(server));
这些都是很简单的,大家一般都是很清楚的,我就不给出具体的代码了,大家都明白怎样写的,主要是明白-----网络通信的原理,TCP/IP原理
- 原始套接字编程----简单的发送SYNtcp数据
- UNIX环境编程-----原始套接字-----疑问:发送给原始套接字的数据是怎么处理的???
- 使用原始套接字编程实现简单的ping程序
- 原始套接字编程
- 【Linux网络编程】原始套接字实例:发送 UDP 数据包
- 通过原始套接字发送UDP数据(IKEEPER换机)
- UNIX环境编程------原始套接字---原始套接字编程实例: 接收的链路层数据包,并对其进行简单分析
- 网络编程原始套接字
- 原始套接字编程示例
- 网络编程原始套接字
- 原始套接字编程接口
- 基于原始套接字编程
- 原始套接字编程(1)
- UNIX环境编程---------原始套接字学习笔记-----原始套接字的bind操作
- 原始套接字发送自定义IP包
- Linux 原始套接字发送接收示例
- 原始套接字SOCK_RAW发送UDP数据包
- linux原始套接字-发送ARP报文
- php实现简易的搜索功能
- 常用布局效果08-表单布局
- 双层神经网络与逻辑回归正反向传播数学公式简要推导
- spring注解入门之IOC,DI
- python连接mysql并让mysql支持中文
- 原始套接字编程----简单的发送SYNtcp数据
- 基于蜂鸣器的开关三极管使用误区详解
- solr 配置
- Spring MVC的web.xml配置详解
- 数据结构与算法之二叉树的Python简单实现
- 通过金矿模型介绍动态规划
- 发送ARP
- 2015第六届蓝桥杯 C/C++B组真题及题解
- 算法之排序(二)