2013-06-03 19 views
0

我想使用原始套接字發送數據包。製作數據包的目標IP與原始套接字發送的目標ip參數之間的區別()

如果我創建一個IP數據包(icmp,tcp或udp數據包),則源IP和目的IP位於IP數據包中。現在我想通過以下線路發送它:

memset(&sin, 0, sizeof(sin)); 
    sin.sin_family = AF_INET; 
    sin.sin_addr.s_addr = inet_addr(dst_ip); 
    sendto(sd, packet, 60, 0, (struct sockaddr *)&sin, sizeof(sin)); 

當然dst_ip應該是相同的數據包中的目的IP。

我想知道如果dst_ip不是在數據包中的目標IP相同會發生什麼。在我看來,dst_ip用於決定應使用哪個NIC發送數據包。而製作的數據包中的目標IP不會被dst_ip更改,並且將由網絡內路由器處理。

我的理解是否正確?還有其他的區別嗎?

謝謝!

回答

0

爲BSD答案是在源代碼中對rip_output(): 一個評論「如果用戶遞給我們一個完整的數據包,使用它。否則,分配一個的mbuf用於報頭和在填寫」 [即,從地址提供給sendto()]。

對於其他系統,你將不得不閱讀一些內核源代碼。

  1. G.R. Wright & W.R. Stevens,TCP/IP Illustrated, vol II:The Implementation,pp.1057-1062。
+0

我沒有找到你的答案和我的問題之間的強烈關係 – misteryes

+0

@misteryes請參閱編輯。 – EJP

相關問題