TCP IP學習 myping 實作

2021-04-25 17:16:15 字數 1527 閱讀 1651

原始套介面提供普通的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成為團...