資源簡介
使用C語言實現原始套接字從數據鏈路層到應用層的操作,Linux系統
代碼片段和文件信息
//使用原始套接字構造UDP數據包并發送(已經實現)
//程序說明:不使用任何關于報頭的結構體直接在光禿的字符數組中嚴格按照協議規定來一次填寫報頭內容從而可以構造出完整的數據包
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#ifdef?HAVE_CONFIG_H
#include?
#endif
?
??????
??????
????int?checksum(int?*buf?int?nword);//校驗和函數??
????int?main(int?argc?char?*argv[])??
????{??
????????//1.創建通信用的原始套接字??
????????int?sock_raw_fd?=?socket(PF_PACKET?SOCK_RAW?htons(ETH_P_ALL));??
??????????
????????//2.根據各種協議首部格式構建發送數據報??
????????unsigned?char?send_msg[1024]?=?{??
????????????//--------------組MAC--------14------??
????????????0xB8?0x81?0x98?0x58?0xBC?0xA4?//dst_mac:?B8:81:98:58:BC:A4??
????????????0xA1?0xB2?0xC3?0xD4?0xE5?0xF6?//src_mac:?A1:B2:C3:D4:E5:F6??
????????????0x08?0x00?????????????????????????//類型:0x0800?IP協議??
????????????//--------------組IP---------20------??
????????????0x45?0x00?0x00?0x00?????????????//版本號:4?首部長度:20字節?TOS:0?--總長度--:??
????????????0?0?0?0?????????????//16位標識、3位標志、13位片偏移都設置0??
????????????128?17???0x00?0x00?????????????//TTL:128、協議:UDP(17)、16位首部校驗和??
????????????12??34???56??78????????????????//src_ip:?12.34.56.78?
????????????192??168???0??103????????????????//dst_ip:?192.168.0.103??
????????????//--------------組UDP--------8+78=86------??
????????????0x1f?0x90?0x17?0x70?????????????//src_port:0x1f90(8080)?dst_port:0x1f90(8080)??
????????????0x00?0x00?0x00?0x00???????????????//#--16位UDP長度--30個字節、#16位校驗和??
????????};??
??????????
????????int?len?=?sprintf(send_msg+42?“%s“?“this?is?for?the?udp?test“);??
????????if(l
- 上一篇:C語言實現操作系統中生產者消費者
- 下一篇:面試常寫的c語言函數
評論
共有 條評論