原始套介面提供普通的tcp和udp套介面不提供的以下3個能力:
1.程序 可以讀與寫icmp,igmp等分組。
2.程序可以讀與寫核心不處理其協議欄位的ipv4資料報。
3.程序可以使用ip_hdrincl 套介面選項自行構造ipv4頭部。
下面的簡單的tcp row socket 實現,在centos 4 中編譯通過
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv)
if(argc == 4)
num = atoi(argv[3]);
for(i = 1;i <= num; i++)
if(setsockopt(s,ipproto_ip,ip_hdrincl,&on,sizeof(on)) < 0)
if((hp = gethostbyname(argv[2])) == null)
} else
bcopy(hp->h_addr_list[0],&ip->ip_dst.s_addr,hp->h_length);
if((hp2 = gethostbyname(argv[1])) == null)
} else
bcopy(hp2->h_addr_list[0],&ip->ip_src.s_addr,hp->h_length);
printf("sending to %s from spoofed %s/n",inet_ntoa(ip->ip_dst),argv[1]);
ip->ip_v = 4;
ip->ip_hl = sizeof(*ip) >> 2;
ip->ip_tos = 0;
ip->ip_len = htons(sizeof(buf));
ip->ip_id = htons(4321);
ip->ip_off = htons(0);
ip->ip_ttl = 255;
ip->ip_p = 1;
ip->ip_sum = 0;
dst.sin_addr = ip->ip_dst;
dst.sin_family = af_inet;
icmp->type = icmp_echo;
icmp->code = 0;
icmp->checksum = htons(~(icmp_echo << 8));
for(offset = 0;offset < 65536;offset += (sizeof(buf) -sizeof(*ip))) else
printf("sendto() is ok./n");
if(offset ==0 )
}close(s);
usleep(30000);
}return 0;
}
TCP IP學習 sniffer 實作
目前大多數作業系統都為應用程式提供訪問資料鏈路層的強大功能。這種功能可以提供如下能力 1.能夠監視由資料鏈路層接收的分組,使得諸如tcpdump等程式能夠在普通計算機系統上執行,而無需實用專門的硬體裝置來監視分組。如果結合實用網路介面進入混雜模式的能力,那麼應用程式甚至能夠監視本地電纜上流通的所有分...
WCF初接觸實作 一
我們通過實現乙個簡單的示例來對wcf有個直觀而淺顯的認識,希望對初次涉及wcf的朋友有所幫助。可以簡單地認為wcf程式分為4部分 契約 服務 宿主 客戶端。我們通過乙個例子來逐步完成各部分,示例程式中,客戶端可以獲取乙個資訊列表,列表中每一項包括id 值 讀值時刻 狀態 狀態變動時刻。這裡我用的是v...
參加《UML全程實作》培訓課
上周末參加了umlchina在杭州舉辦的 uml全程實作 的課程。講師是umlchina首席專家潘加宇。此高人應該算是國內uml的第一牛人了。我去參加培訓的目的有兩個 1 uml熟練運用是我09年對自己在技術層面提出的要求 2 嘗試在團隊中建立統一的設計流程,提高開發人員之間溝通效率,讓uml成為團...