發包工具源碼
『壹』 軟體外包承包方需注意哪些方面國家對此有什麼相關規定嗎
一、項目前期准備階段
(一)前期調研階段。本階段主要從事三方面工作
(1)審視自身的履約能力根據公司的發展目標,判斷該項目外包是否符合公司發展的主要方向,公司有否必要為此項目增加新投資、添置新設備、招聘新員工,如果有此必要,公司有沒有足夠的能力和充裕的時間去實現這些新的投入。
(2)審核承包方的締約資格,判斷其是否有締約權利能力和履約行為能力。尋找合適的外包合作夥伴,驗證和調查公司的實際資質和開發團隊的實力,有必要進行實地考察。具體包括承包方辦公場所(自有/租賃)以及周圍辦公環境、辦公環境的裝修、營業面積大小、管理是否規范、人員精神風貌、開發人員數量、技術水平、男女性別比例等。尤其注意了解開發方是否設置專門的測試員崗位。此外,要注意掌握承包方的開發實例。如有必要,還需要對承包方開展信用調查,包括查看營業執照復印件,企業經營歷史,企業涉訟情況,違法記錄,業內口碑,主要負責人以及股東的情況。
(3)制定資信考察報告書。
(二)製作項目需求。
在項目立項初期,發包方首先要做好內部的時間進度設計和規劃以及一套完整的軟體系統規格說明。其中,項目進度的估算尤為重要,要避免項目發生延誤,計劃中要預留足夠的雙方溝通和確認的時間。
二、與承包方談判、磋商階段(與前一階段可合二為一)
此階段的全過程中始終不能忘記對於雙方利益共同點和利益沖突線要具備清晰的認識和全面的了解;准確預測雙方可能的妥協程度;對於法律法規的相關規定和本合同可能涉及的第三人利益界限有熟練的掌握和冷靜的恪守。
1.發包方發出邀約邀請,將項目的時間進度設計和規劃以及功能需求提交給承包方,承包方據此提交投標書,包括詳細規劃方案。
2.發包方收到承包方提交的項目計劃後,要詳細地跟本企業的計劃進行比對和審核,從而了解承包方對整個項目的流程、內容、估計的工作量和資源的安排是否與項目本身的要求吻合。明顯的差異需要及時澄清並建立共識。雙方要將其記錄入書面文檔。
3.確定合作意向後,要求承包方出具詳細的進度實施方案和系統整體評估方案,並對此方案進行評審和確認,旨在雙方都能明確地了解項目的整體任務量和難度,做好人力物力的合理安排,避免不必要的麻煩,此過程的文檔應留存備查。
4.承包方的核心參與人要書面提交對發包項目的說明報告,由發包方判斷承包方是否理解發包項目的意圖,了解外包項目開發人員的思路是否和設計相符。
5.項目開始前,須做足夠的分析和風險評估,對可能出現的風險設計避免的方法,預先設計好替代方案,甚至外包團隊都應有替代人選。
三、合同簽約階段
外包合同應明確如下內容
1.明確雙方項目組溝通成員名單及其聯系方式,承包方須提供所有參與人的名單及聯系方式、郵件地址等。
2.明確約定開發方必須遵照發包方的需求設計文檔進行開發,在開發過程中,如果出現發包方設計不周或是不合理的地方,開發方須提出問題及修改方案,必須經發包方確認後才能進行修改,並且這些修改需要記錄入文檔。
3、明確約定承包方項目負責人首先需要做出一個詳細的、完整的項目計劃,並在計劃中詳細地列清楚每一項工作需要哪方面人力共同執行。
4.明確約定每一個項目進度都需要發包方確認後才能繼續進行。如果發包方認為有問題並提出修改意見,承包方須根據發包方意見提出書面解決方案,經過發包方確認後進行修改,如果推後時間再修改,須徵得發包方同意。例如承包方在完成系統分析後,需要把分析的結果讓發包方理解,確認承包方對整個系統的理解和分析與企業本身對項目的需求和分析達成一致,這樣才能讓承包方進行其後的模塊設計。
5.明確約定項目過程中的進度匯報方式,有必要時時監控源代碼,了解項目的進展情況,分階段提交項目成果,有必要讓承包方進行階段性成果演示。如果承包方不能按時提交項目成果,須提前向發包方提出申請,且須取得發包方同意。
6.承包方每日將開發的源代碼及設計說明書上傳至CVS伺服器上,承包方項目工作人員需每日將工作情況以日報形式上傳至該CVS伺服器。由發包方於第二天上午進行檢查,並向承包方提出書面反饋意見。
7.每一個程序模塊完成後,承包方須提交測試方案與測試結果。承包方應把有關程序的源代碼列出,並把有關測試的結果列印出來,讓發包方核對結果,確認承包方所說的工作已經完成。如果承包方沒有列出源代碼,發包方有權不予項目驗收。
8.建立幾個大的項目里程碑。約定在大的里程碑內發生的項目延誤由承包方自我消化,大的里程碑點發生的項目延誤將由雙方商討處理。
9.明確約定項目驗收期限、驗收內容(項目不同階段開發方須提交的詳細文檔列表、提交日期、負責人及質量要求、驗收成果中必須包含測試報告及測試結果)、驗收方法以及雙方驗收小組成員(必要時需要承包方參與驗收)。
10.驗收報告須雙方簽字確認才能生效。
11.明確約定項目完成提交時需要提交的完整的交付物,其中源碼作為重要,而且源碼須符合規范。
12.明確約定試運行時間段以及承包方在試運行期間應盡的責任,如果發生的錯誤是需求內的,承包方須無條件修正,並重新驗收。
13.對於發包方合理的需求調整,在工作量的一定百分比之內,承包方應當同意。如果超過此百分比,雙方協商一致解決。未能協商一致的,按照原方案執行。
14.明確約定承包方負責本項目的關鍵人物不能臨時更換。應爭取讓承包方項目主要負責人要做出承諾,堅持到最後。
15.如果發包方處於優勢談判地位,應約定較低的首付款,可以採取低首付,多次數的支付方式。
16.明確約定違約(預期違約、一般違約、嚴重違約)的責任承擔和賠償以及不可抗力或情勢變更的風險承擔方式和原則。
17.明確約定合同自承包方提供經雙方確認後的詳細需求文檔時生效。
18.明確約定合同的變更、權利義務轉讓以及終止(對方主動終止和發包方主動終止合同)條款。
19.明確約定合同爭議處理條款。
四、項目實施階段
1.項目開發過程中應開展有效的溝通,以便及時解決開發過程中發現的結構或設計方面存在的問題。必要時安排一對一的溝通方式,即承包方的開發人員直接和發包方的具體負責人聯系溝通,減少中間的傳遞環節,減少傳遞出錯的幾率。每項重要的溝通須記錄入文檔並經過雙方確認。
2.有效地跟蹤掌控開發情況。發包方需掌握承包方每個開發人員的開發狀態和進度,及時發現和應對任何突發狀況。項目中發現的任何和設計不符的地方或其他問題要及時溝通和解決,避免將問題推到項目結束後。在開發的過程中,驗收也同時進行,而不應等待開發完成後才進行驗收,即要分段進行階段性驗收。
3.項目第一次延期就應該介入解決。開發過程中要作嚴格控制,避免承包方散漫和懈怠。如果是發包方的原因導致項目延誤,發包方要補足承包方時間並形成書面的確認文件。
4.驗收時應嚴格按驗收報告內容進行。按照合同約定時間進行密集型測試和驗收,出現驗收不合格的情況,要及時進行協商和處理,時間要盡量控制到最小范圍。
5.發包方付款事項須與對方配對,在不存在對方履行義務在先的情況下,發包方須按時付款。
6.發包方須根據對方提出的項目進度表,制定發包方項目管理進度表。由項目組組長負責定期對工作計劃跟蹤並督促執行。完成項目工作日誌,對工作進展定期匯總,匯報。
項目組成員須妥善保管來往記錄、郵件、變更確認單等。
成功的軟體外包是發包方和承包方互相信任、高度協作的結果。發包方軟體企業需要合理外包決策,細化和篩選可以外包的內容,確定具體的外包實現方式,選擇合適的承包方,規范外包的實施流程,積極地進行外包項目管理,實現全方位、全過程地監控外包過程,才能將軟體外包風險降到最低。
『貳』 VB編寫的PC機向手機發送簡訊的軟體,源碼,可用。
樓主我估計你這不指望了,這東西都是專業的。
不接外設的話
1:無線藍牙串口技術:通過手機的自帶的GSM模塊通過藍牙串口和手機通信,實現打電話發簡訊等功能。(但你手機要有藍牙串口)
2:網路:比如:
139郵箱就能發簡訊的。用軟體去後台模擬發信行為實現通信功能。
2 用軟體讓飛信去發送。
我自己曾經也研究過這類東東。其實不難,有什麼需求可以把你具體需求發我,本人不勝感激
期待長期合作
本人郵箱:[email protected]
『叄』 CC攻擊的網頁源碼.. 我需要一份[是本機發包]
般cc攻擊都是針對網站的域名進行攻擊,比如網站域名是「xxx」,那麼攻擊者就在攻擊工具中設定攻擊對象為該域名然後實施攻擊。
對於這樣的攻擊措施是在ⅡS上取消這個域名的綁定,讓CC攻擊失去目標。具體操作步驟是:打開「ⅡS管理器」定位到具體站點右鍵「屬性」打開該站點的屬性面板,點擊IP地址右側的「高級」按鈕,選擇該域名項進行編輯,將「主機頭值」刪除或者改為其它的值(域名)。
實例模擬測試,取消域名綁定後Web伺服器的CPU馬上恢復正常狀態,通過IP進行訪問連接一切正常。但是不足之處也很明顯,取消或者更改域名對於別人的訪問帶來了不便,另外,對於針對IP的CC攻擊它是無效的,就算更換域名攻擊者發現之後,他也會對新域名實施攻擊。
域名欺騙解析
如果發現針對域名的CC攻擊,可以把被攻擊的域名解析到127.0.0.1這個地址上。知道127.0.0.1是本地回環IP是用來進行網路測試的,如果把被攻擊的域名解析到這個IP上,就可以實現攻擊者自己攻擊自己的目的,這樣他再多的肉雞或者代理也會宕機,讓其自作自受。另外,當Web伺服器遭受CC攻擊時把被攻擊的域名解析到國家有權威的政府網站或者是網警的網站,讓其網警來收拾他們。現在一般的Web站點都是利用類似「新網」這樣的服務商提供的動態域名解析服務,大家可以登錄進去之後進行設置。
更改Web埠
一般情況下Web伺服器通過80埠對外提供服務,因此攻擊者實施攻擊就以默認的80埠進行攻擊,所以,我們可以修改Web埠達到防CC攻擊的目的。運行ⅡS管理器,定位到相應站點,打開站點「屬性」面板,在「網站標識」下有個TCP埠默認為80,我們修改為其他的埠就可以了。
ⅡS屏蔽IP
我們通過命令或在查看日誌發現了CC攻擊的源IP,就可以在ⅡS中設置屏蔽該IP對Web站點的訪問,從而達到防範ⅡS攻擊的目的。在相應站點的「屬性」面板中,點擊「目錄安全性」選項卡,點擊「IP地址和域名現在」下的「編輯」按鈕打開設置對話框。在此窗口中我們可以設置「授權訪問」也就是「白名單」,也可以設置「拒絕訪問」即「黑名單」。比如我們可以將攻擊者的IP添加到「拒絕訪問」列表中,就屏蔽了該IP對於Web的訪問。
IPSec封鎖
IPSec是優秀的系統防火牆,在排除其他還有別的類型的DDOS攻擊時,針對CC攻擊可以用設置IP策略來對付攻擊。以219.128.*.43這個IP為例子,筆者實際操作對該IP的訪問封鎖。
第一步:「開始→管理工具」,打開「本地安全設置」,右鍵點擊「IP安全策略,在本地機器」選擇「創建IP安全策略」,然後點擊「下一步」,輸入策略「名稱」和「描述」。然後默認一路「下一步」創建了一個名為「封CC攻擊」的IPSec策略。
第二步:右鍵點擊「IP安全策略,在本地機器」選擇「管理IP篩選器表和篩選器操作」,在打開的窗口中點「添加」,在「IP 篩選器列表」窗口添人同第一步的名稱和描述信息。取消「使用添加向導」的勾選,然後點擊「添加」。在「IP 篩選器 屬性」窗口的「地址」選項下設置「源地址」為「192.168.1.6」,目標地址為「我的IP地址」,取消對「鏡像」的勾選;點擊「協議」選項卡,設置「協議類型」為「TCP」,設置「協議埠」為「從任意埠」到「此埠80」最後確定退出。
第三步:在「新規則 屬性」窗口中點選剛才創建的「封CC攻擊」規則,點擊「篩選器操作」選項卡下的「添加」,點選「安全措施」下的「阻止」,在「常規」選項卡下為該篩選器命名為「阻止CC攻擊」然後確定退出。
第四步:點選剛才創建的「阻止CC攻擊」篩選器,一路「確定」退出IP策略編輯器,可以看到在組策略窗口的中創建成功一個名為「封CC攻擊」的策略,然後右鍵點擊該策略選擇「指派」。這樣就實現了對該IP的封鎖。
防火牆
除了利用上述方法外,還可以通過第三方的防火牆進行防範,打開防護牆防火牆可以了,筆者以天鷹ddos防火牆為例進行演示。安裝好天鷹ddos防火牆即可開啟防護,傻瓜式配置界面,默認參數即可防護網站,誤封較少,智能識別蜘蛛。
防CC攻擊
使用加速樂雲防火牆,若遇到CC攻擊時,將自動啟動,可以在2分鍾內快速確定攻擊IP,並封鎖IP,完全攔截CC攻擊。
『肆』 易語言 發送封包 的源碼怎麼寫
知識庫搜索 「網截」
調發送 事件 所屬對象:網截 操作系統支持:Windows
當Windows系統中WinSock使用程序調用send函數時觸發此事件,您可以在本事件中讀取或更改此次被調用函數的參數。如不更改任何參數並保持處理默認調用,返回0、#攔截操作.默認調用;如要處理本次調用為無效,返回1、#攔截操作.無效調用;如要更改本次調用的任何參數,返回2、#攔截操作.更改調用;如要關閉連接(closesocket),返回3、#攔截操作.關閉攔截。
語法: 整數型 _網截_調發送 (調用者信息,套接字句柄,網路數據,調用方式)
參數名
描 述
調用者信息
調用者信息;傳址;調用者的進程及當前使用線程的相關信息。
套接字句柄
整數型;傳址;WinSock的SOCKET句柄。
網路數據
網路數據;傳址;要發送的網路數據。
調用方式
整數型;傳址;該參數使用方法請參見WinSock2文檔(建議參考MSDN)中關於"send"函數 "flags"參數的使用方法。
常式:
說明:
當Windows系統中WinSock使用程序調用send函數時觸發此事件,您可以在本事件中讀取或更改此次被調用函數的參數。如不更改任何參數並保持處理默認調用,返回0、#攔截操作.默認調用;如要處理本次調用為無效,返回1、#攔截操作.無效調用;如要更改本次調用的任何參數,返回2、#攔截操作.更改調用;如要關閉連接(closesocket),返回3、#攔截操作.關閉攔截。
參見:常式 網路服務安裝文件1.1版
--------------------------------------------------------------------------------
&;版權所有 大連大有吳濤易語言軟體開發有限公司 電話:86-0411-88995831 傳真:86-0411-88995834
『伍』 求助WPE用易語言發包
這個是不行的。因為封包都是加密的。並且,一個指令是伴隨著多個封包。要想用易語言完成的話,你必須得知道某個功能或數據的基址。WPE他是模仿網路信息,並不是可以像其他工具一樣,並且一個指令都是有時間的。超過那個時間,系統會認為他無效。綜上所訴:您的問題我無法幫您解決。我是WPE愛好者,扣扣:807847379
『陸』 paramiko pip安裝和源碼安裝有什麼區別
Distribute 和 PIP都是python安裝包的工具,python安裝包的工具有easy_install, setuptools, pip,distribute。
使用這些工具都能下載並安裝django。
Distribute是對標准庫disutils模塊的增強,我們知道disutils主要是用來更加容易的打包和分發包,特別是對其他的包有依賴的包。
安裝Distribute
可以通過distribute_setup.py 腳本來安裝Distribute,也可以通過easy_install, pip,源文件來安裝,不過使用distribute_setup.py來安裝是最簡單和受歡迎的方式
Pip 是安裝python包的工具,提供了安裝包,列出已經安裝的包,升級包以及卸載包的功能。
Pip 是對easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安裝的包也同樣可以使用pip進行安裝。
安裝Pip
Pip的安裝可以通過源代碼包,easy_install或者腳本。
easy_install:
$ easy_install pip
OK, 下面來看一下Pip的使用
安裝package
$ pip install Markdown
列出安裝的packages
$ pip freeze
安裝特定版本的package
通過使用==, >=, <=, >, <來指定一個版本號。
$ pip install 'Markdown<2.0'
$ pip install 'Markdown>2.0,<2.0.3'
升級包
升級包到當前最新的版本,可以使用-U 或者 --upgrade
$ pip install -U Markdown
卸載包
$ pip uninstall Markdown
查詢包
pip search "Markdown"
『柒』 用VC編寫網路嗅探工具
目前,已經有不少的Sniff工具軟體,如Windows環境下,最富盛名的工具是Netxray和Sniffer pro,用它們在 Windows環境下抓包來分析,非常方便。在UNIX環境下如Sniffit,Snoop,Tcpmp,Dsniff 等都是比較常見的。這里介紹一個用C語言和網路數據包和分析開發工具libpcap及winpcap實現的簡易網路Sniffer。
2網路嗅探器程序實現
在c環境下編程,源碼如下:
/* June 2nd,2002
* Project for graation qualification By Bby Team 19 */
#include
#include
//必須加路徑,必須把頭文件packet32.h包含進去
#include "..\..\Include\packet32.h"
#include "..\..\Include\ntddndis.h"
#define Max_Num_Adapter 10
// Prototypes原形
//發包
void PrintPackets(LPPACKET lpPacket);
//設備列表
char AdapterList[Max_Num_Adapter][1024];
// 主程序開始
int main()
{
//define a pointer to an ADAPTER structure設備指針
LPADAPTER lpAdapter = 0;
//define a pointer to a PACKET structure包指針
LPPACKET lpPacket;
int i;
DWORD dwErrorCode;
DWORD dwVersion;
DWORD dwWindowsMajorVersion;
//Unicode strings (WinNT)
WCHAR AdapterName[8192]; //網路適配器設備列表
WCHAR *temp,*temp1;
//ASCII strings (Win9x)
char AdapterNamea[8192]; //網路適配器設備列表
char *tempa,*temp1a;
int AdapterNum=0,Open;
ULONG AdapterLength;
char buffer[256000]; // 容納來自驅動器的數據的緩沖區
struct bpf_stat stat;
// 獲得本機網卡名
AdapterLength=4096;
printf("Packet.dll test application. Library version:%s\n", PacketGetVersion());
printf("Adapters installed:\n");
i=0;
下面這段代碼是用來在不同版本下得到網路適配器名:
Win9x 和WinNT中的網卡名稱是分別用ASCII和UNICODE實現的,所以首先要得到本地操作系統的版本號.:
dwVersion=GetVersion();
dwWindowsMajorVersion= (DWORD)(LOBYTE(LOWORD(dwVersion)));
這里首先用到的Packet.dll函數是PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize,通常它是與驅動程序通信並被調用的第一個函數,它將返回的用戶本地系統中安裝的網路適配器的名字放在緩沖區pStr中;BufferSize是緩沖區的長度:
if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4))
{ //是Windows NT
// 找不到設備列表
if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){
printf("Unable to retrieve the list of the adapters!\n");
return -1;
一個簡易網路嗅探器的實現 來自: 書簽論文網
}
// 找到設備列表
temp=AdapterName;
temp1=AdapterName;
while ((*temp!='\0')||(*(temp-1)!='\0'))
{
if (*temp=='\0')
{
memcpy(AdapterList,temp1,(temp-temp1)*2);
temp1=temp+1;
i++;
}
temp++;
}
// 顯示適配器列表
AdapterNum=i;
for (i=0;i wprintf(L"\n%d- %s\n",i+1,AdapterList);
printf("\n");
}
else //否則就是windows 9x,獲取適配器名的方法同WinNT下
{
if(PacketGetAdapterNames(AdapterNamea,&AdapterLength)==FALSE){
printf("Unable to retrieve the list of the adapters!\n");
論文一個簡易網路嗅探器的實現來自
return -1;
}
tempa=AdapterNamea;
temp1a=AdapterNamea;
while ((*tempa!='\0')||(*(tempa-1)!='\0'))
{
if (*tempa=='\0')
{
memcpy(AdapterList,temp1a,tempa-temp1a);
temp1a=tempa+1;
i++;
}
tempa++;
}
AdapterNum=i;
for (i=0;i printf("\n%d- %s\n",i+1,AdapterList);
printf("\n");
}
下面這段代碼就是讓用戶選擇監聽的網路適配器號:
// 選擇設備
do
{
printf("Select the number of the adapter to open : ");
scanf("%d",&Open);
if (Open>AdapterNum)
printf("\nThe number must be smaller than %d",AdapterNum);
} while (Open>AdapterNum);
然後,將所選擇的設備打開,這里可以設置為「混雜」模式打開,也可以是「直接」模式打開。代碼如下:
// 打開設備
lpAdapter = PacketOpenAdapter(AdapterList[Open-1]);
// 當設備無法打開時,出示錯誤信息:
if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
{
dwErrorCode=GetLastError();
printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode);
return -1;
}
將網卡設置為「混雜」模式,代碼如下:
這里用到函數PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter),它在到來的包上設置了一個硬體過濾器,如操作成功,返回TRUE。AdapterObject是過濾器所在的網卡設備指針;過濾器的常量Filter定義在頭文件ntddndis.h 中,包括有:
•NDIS-PACKET-TYPE-PROMISCUOUS:設置混雜模式,每個到來的包都會被網卡接受;
•NDIS-PACKET-TYPE-DIRECTED:只有直接到主機網卡的包才會被接受;
•NDIS-PACKET-TYPE-BROADCAST:只接受廣播包;
•NDIS-PACKET-TYPE-MULTICAST:只接受到主機所在的組的多播包;
•NDIS-PACKET-TYPE-ALL-MULTICAS:接受每個多播的包。
// set the network adapter in promiscuous mode
// 如果混雜模式設置失敗,提示錯誤:
if(PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE){
一個簡易網路嗅探器的實現 來自: 書簽論文網
printf("Warning: unable to set promiscuous mode!\n");
}
然後在driver中置512K的緩沖:
這里用到函數PacketSetBuff(LPADAPTER AdapterObject,int dim),它被用於設置AdapterObject指向的網卡的驅動程序的緩沖區,成功則返回TRUE。Dim是新的緩沖區的大小,當它被設定時,舊緩沖區中的數據將被丟棄,其中存儲的包也會失去。
需要注意的地方:驅動器緩沖區的大小設置是否恰當,將影響截包進程的性能,設置應能保證運行快且不會丟包。這里設置的是512000Byte。
// set a 512K buffer in the driver
// 當無法設置緩沖區時,提示錯誤:
if(PacketSetBuff(lpAdapter,512000)==FALSE){
printf("Unable to set the kernel buffer!\n");
return -1;
}
PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout)函數的功能是,設置與AdapterObject指定網卡綁定的讀操作超時的值,timeout以毫秒為單位,0表示沒有超時,當沒有包到時,read就不返回。
// set a 1 second read timeout
// 設置1秒的讀取操作超時
if(PacketSetReadTimeout(lpAdapter,1000)==FALSE){
printf("Warning: unable to set the read tiemout!\n");
}
接下來,定位設備,代碼如下:
這里用到函數PacketAllocatePacket(Void)將在內存中分配一個PACKET結構並返回一個指向它的指針,但這個結構的Buffer欄位還沒有設定,所以應再調用PacketInitPacket函數來對其進行初始化。
//allocate and initialize a packet structure that will be used to
//receive the packets.
// 當定位失敗時,提示錯誤:
if((lpPacket = PacketAllocatePacket())==NULL){
printf("\nError: failed to allocate the LPPACKET structure.");
return (-1);
}
然後,就可以初始化設備,開始接受網路包了:
用函數PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length)來初始化PACKET結構。lpPacket是要被初始化的指針;Buffer為指向用戶分配的包含包的數據的緩沖區的指針;Length為緩沖區長度。
需要注意的地方:PACKET結構關聯的緩沖區存儲由packet capture driver 截獲的包,包的數量被緩沖區大小所限制,最大緩沖區的大小就是應用程序從驅動器中一次能讀到的數據的多少。所以設置大的緩沖區可減少系統調用的次數,提高截獲效率。這里設置的是256K。
PacketInitPacket(lpPacket,(char*)buffer,256000);
接下來,是截包主循環:
//main capture loop
這里又用到函數PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync),它將接受(截獲)一個包的集合。參數包括一個指向用來指定截包的網卡的ADAPTER結構指針、一個指向用來容納包的PACKET結構、一個指出是同步還是非同步方式操作的標記。當操作同步時,函數鎖定程序;當操作非同步時,函數不鎖定程序,必須調用PacketWaitPacket過程來檢查是否正確完成。一般採用同步模式。
// 直到有鍵盤鍵入:
while(!kbhit())
{
// capture the packets 捕獲包
// 捕獲包失敗時,提示錯誤:
if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){
printf("Error: PacketReceivePacket failed");
一個簡易網路嗅探器的實現 來自: 書簽論文網
return (-1);
}
// 列印包中的數據,調用自定義函數PrintPackets()
PrintPackets(lpPacket);
}
最後將得到的統計數據列印出來,代碼如下:
這里用到函數PacketGetStats(LPADAPTER AdapterObject,struct bpf_star*s)可以得到兩個驅動程序的內部變數的值:從調用PacketOpenAdapter開始,已經被指定網卡接收的包數目;以及已經被網卡接收但被內核丟棄的包數目。這兩個值被驅動程序拷貝到應用提供的bpf_stat結構中。
//print the capture statistics
// 得到統計值
// 當無法從內核讀取狀態時,提示錯誤:
if(PacketGetStats(lpAdapter,&stat)==FALSE){
printf("Warning: unable to get stats from the kernel!\n");
}
// 列印「XX包被截取;XX包被丟棄」:
else
printf("\n\n%d packets received.\n%d Packets lost",stat.bs_recv,stat.bs_drop);
這里用函數PacketFreePacket(LPPACKET lpPacket)來釋放由lpPacket指向的結構:
// 釋放空間
PacketFreePacket(lpPacket);
用函數PacketCloseAdapter(LPADAPTER lpAdapter)來釋放ADAPTER結構lpAdapter,並關閉網卡指針:
// close the adapter and exit
// 關閉設備退出
PacketCloseAdapter(lpAdapter);
return (0);
} // 主程序結束
其中用來列印數據報的自定義的函數PrintPackets()的代碼在這里就不詳細說明了。
3結束語
通過對網路嗅探器的編寫,目的使大家知道網路管理的重要性,時刻注意網路信息安全問題,做好信息的加密和解密工作。
『捌』 在linux系統下使用hping3工具進行發包測試,網上下的都是源碼包裝不上,有RPM包或者源碼包的安裝方法嗎
看你什麼系統了,redhat/fedora/centos/redflag/suse都是用rpm的,debian/ubuntu/kubuntu都是用deb的,這些包都是事先編譯好的,安裝後直接就可以用,但通用性很差,比如針對fedora11的rpm很有可能在fedora8上不能安裝,因為glibc庫版本不同,用編譯好的東西會不兼容。
源碼包什麼系統都可以用,因為是需要自己編譯的,但麻煩的是由於linux版本太多,更新太快,編譯時經常有很多依賴問題,rpm和deb通過更新自動下載其他依賴包,源碼包就需要一個一個編譯了,比較麻煩。
『玖』 發包長度大於1518的發包工具
三款常用IP發包工具介紹
SENDIP 可在各種UNIX 或LINUX 版本中運行,本人使用的是SLACKWARE 8.0 和
REDHAT 9.0 兩個版本。
可在網站http://www.earth.li/projectpurple/progs/sendip.html 中下載最新的源代碼或RPM
包,目前版本為2.5,源碼包大小隻有54K。
2.1.1. 安裝過程
SENDIP 的安裝過程非常簡單,首先從前面介紹的網站中下載最新的源代碼包,目前為
sendip-2.5.tar.gz。
在LINUX 系統中執行:
#tar –xzvf sendip-2.5.tar.gz
#cd sendip-2.5
#make
#make install
在系統的/usr/local/bin 目錄下會產生一個SENDIP 命令文件,同時,在/usr/local/lib 目錄
下建立一個sendip 目錄,並在其下放置ipv4.so、ipv6.so、tcp.so 等與協議相關的模塊文件。
通過在命令行下運行這個文件,我們可以產生各種各樣我們需要的IP 包,還可以通過運行
腳本自動發送大量的IP 包。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第3 頁共14 頁
2.1.2. 發包方法
SENDIP 可以發送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各種格式的
數據包,SENDIP 本身是以模塊的方式發送各種協議的數據包,用-p 參數指定協議類型,要
發送每種協議的數據包, 必須對該協議的數據包格式有一定的了解。通常發送
TCP/UDP/ICMP 數據包時,都必須以IP 包進行封裝,然後才可以發出去。本節我們將以TCP
數據包為例進行講述。
下面介紹一下SENDIP 的命令行格式,以下為直接執行SENDIP 時的輸出:
Usage: sendip [-v] [-d data] [-h] [-f datafile] [-p mole] [mole options] hostname
-d data add this data as a string to the end of the packet
Data can be:
rN to generate N random(ish) data bytes;
0x or 0X followed by hex digits;
0 followed by octal digits;
any other stream of bytes(以指定位元組的隨機數據填充包中的數據段)
-f datafile read packet data from file(以指定數據文件中的內容填充包中的數據段)
-h print this message(輸出幫助信息)
-p mole load the specified mole (see below)(指定協議類型)
-v be verbose(運行時輸出詳細運行信息,如不指定,運行時不輸出信息)
(協議類型是以模塊的方式指定的,用-p 參數指定)
Moles are loaded in the order the -p option appears. The headers from
each mole are put immediately inside the headers from the previos model in
the final packet. For example, to embed bgp inside tcp inside ipv4, do
sendip -p ipv4 -p tcp -p bgp ....
Moles available at compile time:
ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的協議類型)
通常執行格式如下:
#sendip –v –d r64 –p ipv4 –iv 4 –ih 5 –il 128 –is 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-v:運行時輸出詳細運行信息,如不指定,運行時不輸出信息
–d r64:用64 位元組的隨機數值填充IP 包中的數據段
–p ipv4:指定協議類型為IP 協議(IP 協議有自己的相應參數,以i 開頭)
–iv 4:協議版本為4,即IPV4
–ih 5:指定IP 頭的長度為5×4=20 位元組
–il 128:指定IP 包的總長度為128 位元組
–is 10.0.0.1:指定IP 包的源地址
–id 30.0.0.1:指定IP 包的目的地址
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第4 頁共14 頁
–p tcp:指定IP 包中封裝的包的協議類型(TCP 協議有自己的相應參數,以t 開頭)
–ts 1379:指定TCP 包的源埠1379
–td 23:指定TCP 包的目的埠為23
-tt 8:指定TCP 包的偏移量即TCP 頭的長度,沒有TCP 選項時為5,即20 字
節,有TCP 選項時需要增加。
30.0.0.1:指定發包的目的主機
以上部分為利用SENDIP 發送一個簡單的TCP 數據包的方法,下面結合IP 和TCP 數據
包的格式詳細介紹IP 和TCP 協議的各種參數。
具體各種協議的數據包格式可參考TCP/IP 協議中對各種協議數據包格式的介紹,下面
我們只介紹IP 數據包的格式和TCP 數據包的格式:
IP 數據包的格式:
根據IP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的IP 數據包中參數的
值。
Field name
Size
(bits)
SendIP
option
Description
Version 4 -iv Always 4(對應「4 位版本」,通常值為4,表示IPV4)
Header length 4 -ih
IP header length, measured in 32bit words, 5 if there are
no options(對應「4 位首部長度」,表示以32 位即4
位元組為單位的IP 首部長度,如果沒有IP 參數的話,
通常為5,表示首部長度為20 位元組,如有IP 參數的
話,需要調整該值)
Type of
Service/Differentiated
Services
8 -iy
服務類型(TOS)欄位由8 位組成,其中包括3 位的
優先權欄位(現已被忽略)、4 位的TOS 子欄位和1
位未用位但必須置0,4 位TOS 子欄位分別代表最小
時延、最大吞吐量、最高可靠性和最小費用。4 位只
能置其中1 位,使用時只要將設置相應位後運算出十
進制值即可。如要設置最大吞吐量位(00001000),只
需添加參數iy 8 即可。
Total Length 16 -il Total length of IP packet including header and data,
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第5 頁共14 頁
measured in octets(指定IP 包的總長度,包括IP 頭部
分和數據部分,以8 位位元組為單位,最長為65535)
Identification 16 -ii
Used to help reassembled fragmented packets(指定IP
包的標識號,用來幫助重新組裝分段的IP 包)
-ifr 1 bit: reserved, should be 0
-ifd 1 bit: don't fragment(可指定-ifd x,下可為0、1 或r) Flags 3
-ifm 1 bit: more fragmets(可指定-ifm x,下可為0、1 或r)
Fragment offset 13 -if
Where in the reconstructed datagram this fragment
belongs, measured in 64bit words starting from 0(以8
位元組長度為單位,指定段偏移量)
Time to Live 8 -it
Number of routers the packet can pass through before
being discarded(值的范圍從0 到255,指定TTL,表
示該包可通過的路由器的數目,用於防止包在循環路
徑上無休止地傳遞)
Protocol 8 -ip
Protocol associated with the data. See iana for an
uptodate list of assigned numbers(用於定義IP 包內部
封裝的上層協議的協議號,如TCP 為6,可在IANA
的網站上
http://www.iana.org/assignments/protocol-numbers
獲得最新的協議號表)
Header checksum 16 -ic
Checksum of the IP header data (with checksum set to
zero)(可指定IP 首部校驗和的值,通常由SENDIP 自
動生成,不指定該參數,除非要發出帶有錯誤校驗和
的包)
Source Address 32 -is Duhh...(源地址,以點分十進制方式表示)
Destination Address 32 -id Cabbage(目的地址,以點分十進制方式表示)
Options Variable -io...
No options are required. Any number can be added. See
below for details(定義各種IP 選項,如果定義了IP
選項,則前面的IP 頭的長度值要包括IP 選項的長度,
不帶IP 選項時,該值為20,帶IP 選項時,可設定該
值,如果要故意製造不匹配的包,可不符合規范。)
如果有IP 選項,還可指定IP 選項的值,SENDIP 支持的IP 選項如下表所示。
Name
SendIP
option
RFC Copy Class Number
Type
(see
above)
Length
(0 not
present)
Description
EOL -ioeol 791 0 0 0 0 0
Used as padding if needed
(使用該選項後,會自動在IP 頭
中未用到的位補0)
NOP -ionop 791 0 0 1 1 0
Do nothing. Often used as padding
so the next option starts on a 32 bit
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第6 頁共14 頁
boundary
RR -iorr 791 0 0 7 7 variable
Used to record the route of a
packet.(記錄包走過的每個路由
器, 通常用法是: -iorr
0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中
iorr 表示記錄路由,此時系統會自
動將IP 選項號置為07,0f 表示指
針,即記錄的最後一個IP 地址的
指針,系統會自動運算該IP 選項
的長度)
TS -iots 791 0 2 4 68 variable
Used to record the time at which a
packet was processed by an
intermediate system
LSR -iolsr 791 1 0 3 131 vairable
Loose Source Route - let the
source specify the route for a
packet.
SID -iosid 791 1 0 8 136 4
Rarely used, carries the SATNET
stream identifier.
SSR -iossr 791 1 0 9 137 variable
Strict Source Route - same as LSR,
but extra hops are not allowed.
SEC
791,
1108
1 0 2 130 variable Security, rarely used
E-SEC 1108 1 0 5 133 variable Extended Security, rarely used
通常在SENDIP 中指定IP 選項時,格式比較特別,下面我們以RR 記錄路由選項為例
介紹一下,如果要發送一個記錄三個IP 的數據包,需要考慮如下,一是指定IP 頭的長度要
包括IP 選項的長度,而是要指定RR 記錄路由選項的指針位置和IP 地址(本來是由系統自
動記錄IP 和更新指針位置,但現在必須手工指定),那麼記錄三個IP 包後,指針的位置應
是3+4×3+1=16,造好後,數據包的格式應該如下:
IP 頭07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp
20B RR len ptr 4bytes 4bytes 4bytes Ptr
具體命令行如下:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-ih 10 表示IP 頭的長度為10×4 為40 個位元組,去除標準的20 個位元組長度,為IP
選項預留為20 個位元組
-iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一個10 表示用16 進製表示的指針的
位置,後面為用冒號分隔的三個用點分十進製表示的IP 地址
-ioeol 表示用00 結束IP 選項,並用隨機數填充後面未用的IP 頭位置
以上部分只是以RR 記錄路由IP 選項為例,介紹了sendip 中指定IP 選項的方法,當然
也可以根據自己的要求發送IP 選項不符合常規的數據包。其他的IP 選項與此雷同,但發送
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第7 頁共14 頁
前需要詳細了解IP 選項的格式,才可正確發送。
TCP 數據包的格式:
根據TCP 數據包的格式,SENDIP 有如下命令行參數可以指定對應的TCP 數據包中參
數的值。
Field name
Size
(bits)
SendIP
option
Description
Source port 16 -ts
Source port number for the connection
(以十進制的方式指定TCP 原埠)
Destination port 16 -td
Destination port number
(以十進制的方式指定TCP 目的埠)
Sequence number 32 -tn
Number of the first data octet in this packet. If SYN bit is
set, this is the number of the first data octet of the stream
too.(指定TCP 序列號,如果不指定則隨機產生)
Acknowledgment
number
32 -ta
If ACK bit is set, the next sequence number the sender is
expecting to receive.
Data offset 4 -tt
Length of TCP header in 32 bit words(指定TCP 頭的長
度,單位是以32bits 也就是4 位元組為單位)
Reserved 4 -tr
Should be 0. Note, rfc793 defines this as a 6 bit field, but
the last 2 are used by rfc2481 for ECN as below.
Flags: ECN 1 -tfe
Flags: CWR 1 -tfc
ECN extension flags, see rfc2481. (指定TCP 標志位,
如果要打開哪一位,就在命令行參數中指定相應位的
值,如要設置SYN 狀態,只需在命令行加入-tfs 1 即可
)
Flags: URG 1 -tfu Urgent pointer is significant(同上)
Flags: ACK 1 -tfa Acknowledgment field is significant(同上)
Flags: PSH 1 -tfp Push function(同上)
Flags: RST 1 -tfr Reset the connection(同上)
Flags: SYN 1 -tfs Synchronize sequence numbers(同上)
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第8 頁共14 頁
Flags: FIN 1 -tff No more data from sender(同上)
Window 16 -tw
Number of octet starting from the one in the
Acknowledgement field that the sender is willing to
accept
Checksum 16 -tc
Checksum of the TCP header (with checksum set to 0),
data, and a psuedo-header including the source and
destination IP addresses, IP protocol field and a 16 bit
length of the TCP header and data.
Urgent pointer 16 -tu
If URG bit is set, tHe offset of the last octet of urgent data
in this packet.
Options Variable -to...
No options are required. Any number can be added. See
below for details.
如果有TCP 選項,還可指定TCP 選項的值,SENDIP 支持的TCP 選項如下表所示。
Name
SendIP
option
RFC Type
Length (0
not
present)
Description
EOL -toeol 793 0 0
Used as padding if needed(用00 填充,表示TCP
選項結束,把TCP 頭後面的位置用隨機數填充)
NOP -tonop 793 1 0
Do nothing. Often used as padding so the next
option starts on a 32 bit boundary
MSS -tomss 793 2 4
Specify the maximum recieve segment size of the
sender as a 16 bit number. Only valid when SYN is
also set
WSOPT -towscale 1323 3 3
The window size should be leftshifted by the value
of the option (an 8 bit number). Only valid when
SYN is also set.
SACKOK -tosackok 2018 4 2
Selective Acknowledgement is permitted on this
connection
SACK -tosack 2018 5 variable
Selective Acknowledgement of non-contiguous
blocks of data. The data in the option is a series of
(left edge)-(right edge) pairs giving, respectively,
the first sequence number the has been recieved and
the first that hasn't.
TSOPT -tots 1323 8 10
Timestamp. The first 4 bytes (TSval) are the time
that the packet was sent, the remaining 4 (TSecr)
echo the TSval of a packet that was recieved. TSecr
is only valid when the ACK bit is set.
從上表所示,可以看出,TCP 選項可能只有一個單位元組參數,如-toeol 和-tonop,也可
能由一個Type 號和一個length 長度以及該length 長度指定的位元組數的數據組成的參數,使
用時sendip 會自動運算length 的長度,所以,不能隨意設定TCP 選項的長度,但需要設定
TCP 選項的值。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第9 頁共14 頁
在設定TCP 選項時,同樣要考慮到TCP 頭的長度要包括TCP 選項的長度。
TCP 選項數據包的格式大致如下:
Kind=3 Len=3 數據:移位數
TCP 選項號TCP 選項長度TCP 選項數據佔一個位元組,總長度為三個位元組
具體命令行格式可參照如下格式:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1
-towscale 0 :指設置TCP 選項3,長度為自動3,TCP 選項的值即移位數為0
-toeol :表示TCP 選項結束,後面用隨機數填滿TCP 頭
因為用SENDIP 設定TCP 選項時,不能設定長度,所以,如果要設定長度不正確的包,
還要藉助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 發送的包後,再將對應的TCP
選項的長度改為不規則的值即可。
根據前面介紹的內容,我們已經基本可以掌握用SENDIP 發送各種協議數據包的方法,
當然我們還可以利用他發送各種不符合標準的數據包,如校驗和錯誤、長度不正確、狀態位
不正確等各種我們需要的數據包,在使用時,建議與SNIFFER 搭配使用,以驗證SENDIP
發出的包是否正確,進行有針對性的測試。
2.2. NESSUS 工具
NESSUS 是一個非常龐大的工具,它可以提供功能完善的安全掃描服務,還可以提供全
面的發包功能,用以構造各種格式的網路通信包。本篇只關注NESSUS 的發包功能。
NESSUS 由兩個部分組成,一部分是伺服器,通常運行在POSIX 系統如LINUX/UNIX
系統中,負責掃描和攻擊,並收集數據,另一部分是客戶端,可以運行在LINUX/UNIX 系
統或WINDOWS 系統中,負責接收和顯示數據。
如果只是用來發包,則只需要服務端即可。
NESSUS 有專門的維護網站,可以隨時到http://www.nessus.org 網站下載最新的源代碼,
並獲得全面的幫助。目前,NESSUS 最新的版本為2.0.8a。
2.2.1. NESSUS 安裝方法
安裝NESSUS 前要知道NESSUS 可能需要的支撐軟體包,一個是GTK,通常POSIX
系統下的NESSUS 客戶端需要GTK,如果你的系統安裝了GTK,則必須確保安裝了
gtk-config 程序,可到ftp://ftp.gimp.org/pub/gtk/v1.2 網站下載最新的GTK 程序,如果只在
LINUX/UNIX 系統下安裝服務端,則可以不需要GTK 包;另一個是OPENSSL 包,如果希
望客戶端和服務端的通信採用SSL 方式,則需要OPENSSL 包,可到http://www.openssl.org/
下載最新的OPENSSL 包,OPENSSL 包是可選的。
NESSUS 有三種安裝方法:第一種是利用LINUX 下的LYNX 工具直接從網上安裝,這
種方法很容易,但安全性低,在此不予詳細介紹,可到NESSUS 網站上獲取相關信息。第
二種方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安裝,這種方法簡單且安全性
比較高。第三種方法是獲取源碼包,然後分別編譯再進行安裝。下面分別介紹第二種和第三
種方法。
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第10 頁共14 頁
2.2.1.1. 採用nessus-installer.sh 方式安裝
從NESSUS 網站下載最新的nessus-installer.sh 文件到本地LINUX 目錄,然後執行
#sh nessus-installer.sh
系統會自動安裝NESSUS 到你的系統中,中間會需要你提供相關的提示信息,一直按
回車即可。
2.2.1.2. 採用源碼包方式安裝
如果採用源碼包方式進行安裝,需要下載四個軟體包,並按順序進行安裝。四個軟體包
分別如下:
nessus-libraries
libnasl
nessus-core
nessus-plugins
安裝時必須按順序安裝這四個軟體包。
安裝前,我們必須獲得上面所說的四個軟體包,目前版本為2.0.8a:
nessus-libraries-x.x.tar.gz
libnasl-x.x.tar.gz
nessus-core.x.x.tar.gz
nessus-plugins.x.x.tar.gz
然後開始進行安裝。
1. 安裝nessus-libraries
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure
#make
#make install
2. 安裝libnasl-x.x.tar.gz (執行與上面相同的操作)
3. 安裝nessus-core.x.x.tar.gz(執行與上面相同的操作)
4. 安裝nessus-plugins.x.x.tar.gz (執行與上面相同的操作)
5. 如果使用的是LINUX 系統,必須確保/usr/local/lib 路徑在/etc/ld.so.conf 文件中,如
果是SOLARIS 系統, 必須執行export LD_LIBRARY_PATH=
$LD_LIBRARY_PATH :/usr/local/lib 命令。
6. 執行ldconfig 命令
7. 如果不想或不能使用GTK 的客戶端,可強制使用命令行方式,這時,在執行第三
步編譯nessus-core 時,可以使用如下命令:
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure --disable-gtk
#make
#make install
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第11 頁共14 頁
執行以上命令後,NESSUS 就已經安裝在您的系統中了。
2.2.2. NESSUS 的發包方法
NESSUS 通常採用腳本方式控制發出的包,下面我們以發送聖誕老人攻擊包為例,來介
紹如何利用NESSUS 發送數據包。
聖誕老人包是通過發送TCP Flag 中同時有SYN 和FIN 標志的數據包,穿透防火牆,
來達到攻擊的目的。
為使用NESSUS 發送攻擊包,首先要定義一個腳本,在LINUX 下,執行vi sendp 命令,
輸入如下內容:
srcaddr=this_host(); 註:自動獲取當前主機的IP 地址
ip = forge_ip_packet( ip_v : 4, 註:IP 協議版本為IPV4
ip_hl : 5, 註:IP 頭的長度為5×4=20 位元組
ip_tos : 0,
ip_len : 40, 註:在這里輸入實際的長度40,因為IP 頭和TCP 頭都為20
ip_id : 0xABA,
ip_p : IPPROTO_TCP, 註:內部數據包協議為TCP
ip_ttl : 255,
ip_off : 0,
ip_src : srcaddr); 註:可在此直接輸入IP
port = get_host_open_port(); 註:自動獲取當前主機上的可用埠
if(!port)port = 139; 註:如果沒有可用埠,就自動使用139 埠
tcpip = forge_tcp_packet( ip : ip, 註:表示IP 層協議採用前面定義的IP 協議包
th_sport : port, 註:可在這里直接輸入埠
th_dport : port, 註:可在這里直接輸入埠
th_flags : TH_SYN|TH_FIN, 註:設置TCP 狀態的SYN 和FIN 標志位
th_seq : 0xF1C,
th_ack : 0,
th_x2 : 0,
th_off : 5, 註:TCP 頭的長度位5×4=20 位元組
th_win : 512,
th_urp : 0);
result = send_packet(tcpip,pcap_active:FALSE);
編輯完上面的腳本後,保存退出,運行如下命令:
#nasl –t 目的IP 地址測試腳本
如:
#nasl –t 10.0.0.227 sendp
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第12 頁共14 頁
通過Sniffer 抓包,就會發現有相應的聖誕老人包。
在我的使用過程中,發現NESSUS 好像不支持發送帶有IP 或TCP 選項的包。
具體發包的參數可參考http://www.nessus.org/doc/nasl.html
2.3. SNIFFER 工具
用SNIFFER 發包時,有兩種方式,一種是直接利用Packet Generator 工具,從0 開始用
16 進制的方式造一個數據包,這種方法難度較高,因為要自己算出校驗和,除非需要重現
在網路上抓到的一個16 進制格式的數據包,另外一種方式是利用已經抓到的數據包修改一
下,再發送出去,具體實現方法分別如下。
2.3.1. 利用Packet Generator 直接造包
在SNIFFER 中,選擇Tools|Packet Generator 菜單,系統彈出窗口如下:
按圖中的紅色框中的按鈕,系統會彈出一個構造包內容的對話框,如下所示:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第13 頁共14 頁
在上圖中可輸入包的內容,還可規定發包的個數和包的長度。
2.3.2. 利用已抓的包發包
利用已抓的包進行修改,可以避免大量的運算和輸入,只需要更改自己需要更改的地方,
然後發出去即可。
如上圖所示,按包的大致要求,用其他工具造好包後,用SNIFFER 抓包,或者直接將
網路上的可疑包抓過來,然後,用滑鼠郵件單擊該包,彈出如上圖所示的快捷菜單,從中選
擇Send Current Frame 菜單,系統就會彈出如下圖所示的發包窗口:
AntPower 版權所有&; 2003 技術文章
http://www.antpower.org 第14 頁共14 頁
按要求更改包的內容,即可發送。需要注意的是如果更改了IP 地址或其他頭中的內容,
則需要更新校驗和,對MAC 或選項的更改不需要更改校驗和。
3. 總結
通過對比前面的三種發包工具,我們發現每種工具都有自己的優點和缺點,SENDIP 比
較短小而且功能較齊全,比較適合在日常測試中使用,SNIFFER 發包工具最自由,可以發
出任何可能的數據包,NESSUS 工具功能比較全面,但在發包方面不如SENDIP,所以,建
議如果是測試需要的話,應該採用SENDIP 和SNIFFER 相結合的方式,如果同時還要使用
掃描等其他功能,可以採用NESSUS 工具。