/************************************
*自定义发IP包例子(TCP/IP包发送)
*给目标主机的端口发送一个 syn请求,
*注意目标主机的信息会发给发送IP地址的主机
*这说明TCP/IP协议本身有IP期骗的漏洞
*这种方运可以自己写成特殊的基于IP协议上层的自定义协议
************************************/#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netinet/ip.h>   //ip
#include <netinet/tcp.h> //tcp
#include <stdlib.h>//发送端IP
char srcip[]="100.100.100.100";
//目标端IP
char dstip[]="192.168.11.220";
//发送端IP端口
int srcport=25;
//目标IP端口
int dstport=99;//以下是从ip.h和tcp.h取的,但BSD和LINUX用的名称有些不一样主要是TCP不一样typedef struct _IP
{
#if __BYTE_ORDER == __LITTLE_ENDIANunsigned int ip_hl:4;               //little-endian IP头长度(单位为32位)4位unsigned int ip_v:4;                //版本号4 IP4用4
#endif
#if __BYTE_ORDER == __BIG_ENDIANunsigned int ip_v:4;                // versionunsigned int ip_hl:4;               // header length
#endifu_int8_t ip_tos;                    //服务类型  一般为0u_short ip_len;                     //数据总长度 (单位为32位)u_short ip_id;                      //标识16u_short ip_off;                     //分段偏移
#define IP_RF 0x8000                    // reserved fragment flag  //标志
#define IP_DF 0x4000                    // dont fragment flag
#define IP_MF 0x2000                    // more fragments flag
#define IP_OFFMASK 0x1fff               // mask for fragmenting bitsu_int8_t ip_ttl;                    //生存时间u_int8_t ip_p;                      //传输协议 tcp是6u_short ip_sum;                     //头校验和struct in_addr ip_src, ip_dst;      // 源地址 目标地址
}IP;typedef struct _TCPHeader
{u_int16_t source;               // 源端口u_int16_t dest;                 // 目的端口tcp_seq seq;                    // 序号tcp_seq ack_seq;                // 确认号 收到的TCP信息的序号+1
#if __BYTE_ORDER == __LITTLE_ENDIANu_int16_t res1:4;               //保留u_int16_t doff:4;               //保留u_int16_t fin:1;                //标志 结束u_int16_t syn:1;                //标志 同步u_int16_t rst:1;                //标志 重置u_int16_t psh:1;                //标志 入栈u_int16_t ack:1;                //标志 确认u_int16_t urg:1;                //标志 紧急u_int16_t res2:2;
#elif __BYTE_ORDER == __BIG_ENDIANu_int16_t doff:4;u_int16_t res1:4;u_int16_t res2:2;u_int16_t urg:1;u_int16_t ack:1;u_int16_t psh:1;u_int16_t rst:1;u_int16_t syn:1;u_int16_t fin:1;
#else
#error  "Adjust your <bits/endian.h> defines"
#endifu_int16_t window;           //窗口u_int16_t check;            //校验和u_int16_t urg_ptr;          //紧急指针
}TCPHeader;//校验和函数 ip头
unsigned short IPCheakSum (unsigned short *packet, int packlen)
{register unsigned long sum = 0;while (packlen > 1) {sum+= *(packet++);packlen-=2;}if (packlen > 0)sum += *(unsigned char *)packet;while (sum >> 16)sum = (sum & 0xffff) + (sum >> 16);return (unsigned short) ~sum;
}
//校验和函数 tcp头
unsigned short TCPCheckSum (unsigned char *iphdr, unsigned short *packet,int packlen)
{unsigned short *buf;unsigned short res;buf = malloc(packlen+12);if(buf == NULL) return 0;memcpy(buf,iphdr+12,8); //源IP地址和目标IP地址*(buf+4)=htons((unsigned short)(*(iphdr+9)));*(buf+5)=htons((unsigned short)packlen);memcpy(buf+6,packet,packlen);res = IPCheakSum(buf,packlen+12);free(buf);return res;
}int main()
{int sock, bytes_send, fromlen,n,id,s;unsigned char buffer[65535];sockaddr_in toaddr;IP *ip;TCPHeader *tcp;for (n=0;n<60000;n++ ){buffer[n]=0;}//发送地址toaddr.sin_family =AF_INET;//        inet_aton("192.168.11.38",&toaddr.sin_addr);   //字符串转入地址inet_aton(dstip,&toaddr.sin_addr);   //字符串转入地址//建立原始TCP包方式IP+TCP信息包sock = socket(AF_INET, SOCK_RAW,IPPROTO_RAW);   //IP方式//     sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);if (sock>0) {printf("socket ok\n");}else {printf ("socket error \n");}n=1;if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &n, sizeof(n)) < 0) {printf("2");perror("IP_HDRINCL");exit(1);}ip=(struct ip *)buffer;ip->ip_id=0x9911;               ip->ip_v=4;ip->ip_hl=5;                           ip->ip_ttl=36;                         ip->ip_p=6;     //tcp 为6ip->ip_len=htons(60);inet_aton(dstip,&ip->ip_dst);//        inet_aton("192.168.11.38",&ip->ip_dst);tcp = (struct tcphdr *)(buffer + (4*ip->ip_hl));tcp->source=htons(srcport);                            //源端口tcp->dest=htons(dstport);  tcp->seq=htons(0x9990);tcp->doff=0x15;tcp->ack_seq=0;tcp->syn=1;tcp->window=htons(0x20);inet_aton(srcip,&ip->ip_src);//        ip->ip_src.s_addr=htonl(0x09010101+n);tcp->check=0x0;       tcp->check=TCPCheckSum((unsigned char *)buffer, (unsigned short *)tcp,40);ip->ip_sum=0;ip->ip_sum=IPCheakSum((unsigned short *)buffer,20);bytes_send=sendto(sock,buffer,60,0,(struct sockaddr *)&toaddr,sizeof(toaddr));    if (bytes_send>0){printf("OK bytes_send %d \n",bytes_send);printf("IP_source address ::: %s \n",inet_ntoa(ip->ip_src));printf("IP_dest address ::: %s \n",inet_ntoa(ip->ip_dst));}
}

[C++]VC自定义发IP包例子相关推荐

  1. Teardrop攻击——发送虚假IP包信息

    Teardrop攻击--发送虚假IP包信息 一.原始套接字概述 二.Teardrop攻击原理阐述 三.编写Teardrop程序(伪造一个虚假地址的IP包) 四.参考链接 一.原始套接字概述 原始套接字 ...

  2. 发送自定义IP包(测试中:第二版)

    发送自定义IP包:         public struct ip_hdr   //IP头         {            public byte h_lenver; //4位首部长度+4 ...

  3. IP协议(RFC791)-IP包格式

    IP封包格式(IPv4包首部长度为20字节) Internet Header Format0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 ...

  4. 学习teardrop攻击并伪造一个ip包

    编译环境:Ubuntu18.04 编程语言:c语言 使用原始套接字编程中的 Teardrop 代码编程,伪造一个虚假地址的 IP 包,包的内容填入 Fake News ,发送此包,并用 wiresha ...

  5. 你不得不知道的 IP 包详解(傻瓜式讲解)

    写在前面的话:  在刚开始学习网络的时候感觉一些包以及一些啥层的啥协议特别抽象,总是不能窥探其中的原理.而经过自己利用模拟软件进行网络学习环境的搭建,以及传输时的抓包分析,终于将那一层窗户纸捅破了,希 ...

  6. UDP收/发广播包原理及步骤

    UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口.因为同一主机上的程序使用网络是通过端口号来区分的. UDP Socket的使用 ...

  7. ip 包流量分析程序_【干货】西门子S7300六大流量异常场景检测

    前言 互联与共享成为工业控制系统新的发展方向,工控系统与企业办公网和互联网逐渐相连,工业控制网络环境越来越开放. 工业控制系统需从设备安全和信息数据安全两方面保障系统稳定运行: 从 ICS 自身结构看 ...

  8. 通过 Teardrop 攻击程序学习自制 IP 包及了解包的结构

    目录 一.含义简析 1)什么是原始套接字 2)了解 Teardrop 攻击 二.代码编写 1)虚拟机设置 2)编写代码 三.总结 四.参考资料 使用原始套接字编程中的 Teardrop 代码编程,伪造 ...

  9. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

  10. 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...

    用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法 北 京 航 空 航 天 大 学 计 算 机 科 学 与 工 程 系 黎 杰 麦 中 凡 ---- 1. 引 言 -- ...

最新文章

  1. [SCOI2007]蜥蜴 (网格图经典四方向建边)
  2. js 乘法除法精度问题
  3. c3p0获取连接Connection后的Close()---释疑
  4. HDU - 6598 Harmonious Army(最大流最小割)
  5. 机器学习(三十七)——Integrating Learning and Planning(3)
  6. lotus php,LotusPhp笔记之:Cookie组件的使用详解
  7. java导出hbase表数据_通用MapReduce程序复制HBase表数据
  8. 最新光子计算处理器面世:单个光子芯片集成超万个光子器件,频率达1GHz
  9. 【HM】第2课:JavaScript基础
  10. python读json文件太大github_GitHub上最火的开源项目是啥|JSON文件实战处理
  11. Hibernate框架 配置文件基本架构
  12. Linux 账户信息显示和实现账户安全
  13. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 列表表达式/列表重写...
  14. 矩阵的转置、加和乘法写入C++
  15. excel打开密码忘记了_忘记EXCEL表格密码怎么办,这样操作可以清除
  16. windows10无法使用内置管理员账户打开应用
  17. 互联网 HR 黑话大全,太真实了!
  18. 微信小程序——章节自测七
  19. Twitter新任80后印度裔CEO,为啥是他?
  20. 网络工程师发展及待遇--学习

热门文章

  1. 《修炼之道:.NET开发要点精讲》读书笔记(三)
  2. centos7.4 安装配置rabbitmq-server 实操记录
  3. noip2011——普及组——瑞士轮
  4. IOS 使用 ZbarSDK 二维码扫描
  5. 走进C标准库(6)——string.h中函数的实现memchr
  6. invocation, 作者 Medwyn Goodall,女巫医 [搜索 invocation Medwyn Goodall]
  7. C# 读写锁 ReaderWriteLock
  8. 正则表达式30分钟入门教程[轉]
  9. 设计模式之组合模式——Java语言描述
  10. Java学习之正则表达式