ulp協議
㈠ ulp是什麼意思
ULP
abbr. upper layer protocol, upper level protocol 高層協議; ultra-low pressure 超低壓(力) user location protocol 用戶定位協議; unileaflet prolapse 單小葉脫垂;
[網路] 上層協議;
[例句]Preparation and Properties of Polypropylene Grafted with ULP Containing Europium
含銪線性不飽和聚酯專接枝屬聚丙烯及其性能研究
㈡ san英語 是什麼意思
存儲域網路(Storage Area Network)的支撐技術是Fibre Channel(FC)技術,這是ANSI為網路和通道I/O介面建立的一個標准集成。支持HIPPI,IPI,SCSI,IP,ATM等多種高級協議,它的最大特性是將網路和設備的通訊協議與傳輸物理介質隔離開.這樣多種協議可在同一個物理連接上同時傳送,高性能存儲體和寬頻網路使用單I/O介面使得系統的成本和復雜程度大大降低。如通過Switch擴充至交換仲裁復用結構則可將用戶擴至很多。FC使用全雙工串列通訊原理傳輸數據,傳輸速率高達1062.5Mbps,Fibre Channel的數據傳輸速度為100MB/S,雙環可達200MB/S,使用同軸線傳輸距離為30米,使用單模光纖傳輸距離可達10公里以上。光纖通道支持多種拓撲結構,主要有:點到點(Links)、仲裁環(FC-AL)、交換式網路結構(FC-XS)。點對點方式的例子是一台主機與一台磁碟陣列透過光纖通道連接;其次為光纖通道仲裁環(FC-AL),在FC-AL的裝置可為主機或存儲裝置。第三種FC-XS交換式架構在主機和存儲裝置之間透過智能型的光纖通道交換器連接,使用交換架構需使用存儲網路的管理軟體。
FC技術具有以下優越性:
(1)既具有單通道的特點,又具有網路的特點,它是把設備連接到網路結構上的一種高速通道。而這種網路結構描述了連接兩套設備的單條電纜以及連接許多設備的交換機產生網狀結構。
(2)光纖通道最大優點是速度快,它可以給計算機設備提供接近於設備處理速度的吞吐量。
(3)協議無關性,它有很好的通用性,是一種通用傳輸機制。適用范圍廣,可提供多性價比的系統,從小系統到超大型系統,支持存在的多種指令集,如IP、SCSI、IPI。
光纖通道規范定義的速率最高可到4Gbps,目前T11工程組對10Gbps傳輸速度的FC規范也在緊鑼密鼓的制定之中。
FC是一種分層結構,每個層次定義為一個功能級,但是所分的層不能直接映射到OSI模型的層上。FC通道的五層定義為:物理媒介和傳輸速率、編碼方式、幀協議和流控制、公共服務以及上級協議(ULP)介面。
1) FC-0:
FC-0是物理層底層標准。FC-0層定義了連接的物理埠特性,包括介質和連接器(驅動器、接收機、發送機等)的物理特性、電氣特性和光特性、傳輸速率以及其它的一些連接埠特性。物理介質有光纖、雙絞線和同軸電纜。帶有ECL的銅芯同軸電纜,用於高速、短距離傳輸。雙絞線用於25MB/s數據傳輸,距離可達50米。帶有激光和LED傳導的光纖,用於長距離的傳輸,光纖通道的數據誤碼率低於10E-12,它具有嚴格的抖動容許規定和串列I/O電路能夠進行正常管理的其他一些電氣條件。
2) FC-1(傳輸協議)
FC-1根據ANSI X3 T11標准,規定了8B/10B的編碼方式和傳輸協議,包括串列編碼、解碼規則、特殊字元和錯誤控制。傳輸編碼必須是直流平衡以滿足接收單元的電氣要求。特殊字元確保在串列比特流中出現的是短字元長度和一定的跳變信號,以便時鍾恢復。8B/10B碼在現實中的應用是穩定和簡單的。
3) FC-2(幀協議):
FC-2層定義了傳輸機制、包括幀定位、幀頭內容、使用規則以及流量控制等。光纖通道數據幀長度可變,可擴展地址。用於傳輸數據的光纖通道數據幀長度最多達到2K,因此非常適合於大容量數據的傳輸。幀頭內容包括控制信息、源地址、目的地址、傳輸序列標識和交換設備等。64位元組可選幀頭用於其它類型網路在光纖通道上傳輸時的協議映射。光纖通道依賴數據幀頭的內容來引發操作,如把到達的數據發送到一個正確的緩沖區里。
4) FC-3(公共服務):
提供高級特性的公共服務,即埠間的結構協議和流動控制,它定義了三種服務:條帶化(Striping)、搜索組(HuntGroup)和多播(Multicast)。條帶化的目的是為了利用多個埠在多個連接上並行傳輸,這樣I/O傳輸帶寬能擴展到相應的倍數。搜索組用於多個埠去響應一個相同名字地址的情況,它通過降低到達"占線"的埠的概率來提高效率。多播用於將一個信息傳遞到多個目的地址。
5) FC-4(ULP映射):
它是光纖通道標准中定義的最高等級,固定了光纖通道的底層跟高層協議(ULP)之間的映射關系以及與現行標準的應用介面,這里的現行標准包括現有的所有通道標准和網路協議,如SCSI介面和IP、ATM、HIPPI等。
㈢ 藍牙V2.1+EDR是什麼意思和藍牙4.0哪個好
藍牙2.1+EDR與藍牙4.0的區別,對用戶來講,最直接的影響是速度的改變。
如上圖,2.0版本最高只能達到3M,而4.0可以達到24M。
其它具體的技術方面,2.0發展到3.0的時候,已經有一些改進,主要的新特性是AMP(Alternative MAC/PHY),它也是802.11新增的高速傳輸功能。高速並非該規格的強制特性,因此只有標注了"+HS"商標的設備才是真正通過802.11高速數據傳輸支持藍牙。沒有標注"+HS"後綴的藍牙3.0設備僅支持核心規格3.0版本或之前的核心規范附錄1。
而到了4.0,又有新改進:
藍牙技術聯盟於2010年6月30日正式推出藍牙核心規格4.0 (稱為Bluetooth Smart)。它包括經典藍牙、高速藍牙和藍牙低功耗協議。高速藍牙基於Wi-Fi,經典藍牙則包括舊有藍牙協議。
藍牙低功耗,也就是早前的Wibree,是藍牙4.0版本的一個子集,它有著全新的協議棧,可快速建立簡單的鏈接。作為藍牙1.0 – 3.0版本中藍牙標准協議的替代方案,它主要面向對功耗需求極低、用紐扣電池供電的應用。晶元設計可有兩種:雙模、單模和增強的早期版本。早期的Wibree和藍牙ULP(超低功耗)的名稱被廢除,取而代之的是後來用於一時的BLE。2011年晚些時候,新的商標推出,即用於主設備的 「Bluetooth Smart Ready」和用於感測器的「Bluetooth Smart」。
單模情況下,只能執行低功耗的協議棧。意法半導體、笙科電子、CSR、北歐半導體和德州儀器已經發布了單模藍牙低功耗解決方案。
雙模情況下,Bluetooth Smart功能整合入既有的經典藍牙控制器。截至2011年3月,高通創銳訊、CSR、博通和德州儀器已宣布發表符合此標準的晶元。適用的架構共享所有經典藍牙既有的射頻和功能,相比經典藍牙的價格上浮也幾乎可以忽略不計。
單模晶元的成本降低,使設備的高度整合和兼容成為可能。它的特點之一是輕量級的鏈路層,可提供低功耗閑置模式操作、簡易的設備發現、和可靠地點對多數據傳輸,並擁有成本極低的高級節能和安全加密連接。
4.0版本的一般性改進包括推進藍牙低功耗模式所必需的改進、以及通用屬性配置文件(GATT) 和AES加密的安全管理器(SM) 服務。
㈣ 攔截http協議封包hook哪些
文章比較長,得慢點看。轉載
利用HOOK攔截封包原理 截獲API是個很有用的東西,比如你想分析一下別人的程序是怎樣工作的。這里我介紹一下一種我自己試驗通過的方法。 首先,我們必須設法把自己的代碼放到目標程序的進程空間里去。Windows Hook可以幫我們實現這一點。SetWindowsHookEx的聲明如下: HHOOK SetWindowsHookEx( int idHook, // hook type HOOKPROC lpfn, // hook procere HINSTANCE hMod, // handle to application instance DWORD dwThreadId // thread identifier ); 具體的參數含義可以翻閱msdn,沒有msdn可謂寸步難行。 這里Hook本身的功能並不重要,我們使用它的目的僅僅只是為了能夠讓Windows把我們的代碼植入別的進程里去。hook Type我們任選一種即可,只要保證是目標程序肯定會調用到就行,這里我用的是WH_CALLWNDPROC。lpfn和hMod分別指向我們的鉤子代碼及其所在的dll,dwThreadId設為0,表示對所有系統內的線程都掛上這樣一個hook,這樣我們才能把代碼放到別的進程里去。 之後,我們的代碼就已經進入了系統內的所有進程空間了。必須注意的是,我們只需要截獲我們所關心的目標程序的調用,因此還必須區分一下進程號。我們自己的鉤子函數中,第一次運行將進行最重要的API重定向的工作。也就是通過將所需要截獲的API的開頭幾個位元組改為一個跳轉指令,使其跳轉到我們的API中來。這是最關鍵的部分。這里我想截三個調用,ws2_32.dll中的send和recv、user32.dll中的GetMessageA。 DWORD dwCurrentPID = 0; HHOOK hOldHook = NULL; DWORD pSend = 0; DWORD pRecv = 0; GETMESSAGE pGetMessage = NULL; BYTE btNewBytes[8] = { 0x0B8, 0x0, 0x0, 0x40, 0x0, 0x0FF, 0x0E0, 0 }; DWORD dwOldBytes[3][2]; HANDLE hDebug = INVALID_HANDLE_value; LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam ) { DWORD dwSize; DWORD dwPIDWatched; HMODULE hLib; if( dwCurrentPID == 0 ) { dwCurrentPID = GetCurrentProcessId(); HWND hwndMainHook; hwndMainHook = ::FindWindow( 0, "MainHook" ); dwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 ); hOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 ); if( dwCurrentPID == dwPIDWatched ) { hLib = LoadLibrary( "ws2_32.dll" ); pSend = (DWORD)GetProcAddress( hLib, "send" ); pRecv = (DWORD)GetProcAddress( hLib, "recv" ); ::ReadProcessMemory( INVALID_HANDLE_value, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize ); *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_send; ::WriteProcessMemory( INVALID_HANDLE_value, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); ::ReadProcessMemory( INVALID_HANDLE_value, (void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize ); *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_recv; ::WriteProcessMemory( INVALID_HANDLE_value, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); hLib = LoadLibrary( "user32.dll" ); pGetMessage = (GETMESSAGE)GetProcAddress( hLib, "GetMessageA" ); ::ReadProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)dwOldBytes[2], sizeof(DWORD)*2, &dwSize ); *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage; ::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); hDebug = ::CreateFile( "C:\\Trace.log", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 ); } } if( hOldHook != NULL ) { return CallNextHookEx( hOldHook, nCode, wParam, lParam ); } return 0; } 上面的鉤子函數,只有第一次運行時有用,就是把三個函數的首8位元組修改一下(實際上只需要7個)。btNewBytes中的指令實際就是 mov eax, 0x400000 jmp eax 這里的0x400000就是新的函數的地址,比如new_recv/new_send/new_GetMessage,此時,偷梁換柱已經完成。再看看我們的函數中都幹了些什麼。以GetMessageA為例: BOOL _stdcall new_GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax ) { DWORD dwSize; char szTemp[256]; BOOL r = false; //Watch here before it's executed. sprintf( szTemp, "Before GetMessage : HWND 0x%8.8X, msgMin 0x%8.8X, msgMax 0x%8.8x \r\n", hWnd, wMsgFilterMin, wMsgFilterMax ); ::WriteFile( hDebug, szTemp, strlen(szTemp), &dwSize, 0 ); //Watch over // restore it at first ::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)dwOldBytes[2], sizeof(DWORD)*2, &dwSize ); // execute it r = pGetMessage( lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax ); // hook it again *(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage; ::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize ); //Watch here after it's executed sprintf( szTemp, "Result of GetMessage is %d.\r\n", r ); ::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 ); if( r ) { sprintf( szTemp, "Msg : HWND 0x%8.8X, MSG 0x%8.8x, wParam 0x%8.8X, lParam 0x%8.8X\r\nTime 0x%8.8X, X %d, Y %d\r\n", lpMsg->hwnd, lpMsg->message, lpMsg->wParam, lpMsg->lParam, lpMsg->time, lpMsg->pt.x, lpMsg->pt.y ); ::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 ); } strcpy( szTemp, "\r\n" ); ::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 ); //Watch over return r; } 先將截獲下來的參數,寫入到一個log文件中,以便分析。然後恢復原先保留下來的GetMessageA的首8位元組,然後執行真正的GetMessageA調用,完畢後再將執行結果也寫入log文件,然後將GetMessageA的執行結果返回給調用者。 整個截獲的過程就是這樣。你可以把其中的寫log部分改成你自己想要的操作。這里有個不足的地方是,截獲動作是不能夠並發進行的,如果目標進程是多線程的,就會有問題。解決辦法是,可以在每次new_GetMessage中加入一個CriticalSection的鎖和解鎖,以使調用變為串列進行,以原始套接字的方式 截獲流經本機網卡的IP數據包 從事網路安全的技術人員和相當一部分准黑客(指那些使用現成的黑客軟體進行攻擊而不是根據需要去自己編寫代碼的人)都一定不會對網路嗅探器(sniffer)感到陌生,網路嗅探器無論是在網路安全還是在黑客攻擊方面均扮演了很重要的角色。通過使用網路嗅探器可以把網卡設置於混雜模式,並可實現對網路上傳輸的數據包的捕獲與分析。此分析結果可供網路安全分析之用,但如為黑客所利用也可以為其發動進一步的攻擊提供有價值的信息。可見,嗅探器實際是一把雙刃劍。 雖然網路嗅探器技術被黑客利用後會對網路安全構成一定的威脅,但嗅探器本身的危害並不是很大,主要是用來為其他黑客軟體提供網路情報,真正的攻擊主要是由其他黑軟來完成的。而在網路安全方面,網路嗅探手段可以有效地探測在網路上傳輸的數據包信息,通過對這些信息的分析利用是有助於網路安全維護的。權衡利弊,有必要對網路嗅探器的實現原理進行介紹。 文章正文 嗅探器設計原理 嗅探器作為一種網路通訊程序,也是通過對網卡的編程來實現網路通訊的,對網卡的編程也是使用通常的套接字(socket)方式來進行。但是,通常的套接字程序只能響應與自己硬體地址相匹配的或是以廣播形式發出的數據幀,對於其他形式的數據幀比如已到達網路介面但卻不是發給此地址的數據幀,網路介面在驗證投遞地址並非自身地址之後將不引起響應,也就是說應用程序無法收取到達的數據包。而網路嗅探器的目的恰恰在於從網卡接收所有經過它的數據包,這些數據包即可以是發給它的也可以是發往別處的。顯然,要達到此目的就不能再讓網卡按通常的正常模式工作,而必須將其設置為混雜模式。 具體到編程實現上,這種對網卡混雜模式的設置是通過原始套接字(raw socket)來實現的,這也有別於通常經常使用的數據流套接字和數據報套接字。在創建了原始套接字後,需要通過setsockopt()函數來設置IP頭操作選項,然後再通過bind()函數將原始套接字綁定到本地網卡。為了讓原始套接字能接受所有的數據,還需要通過ioctlsocket()來進行設置,而且還可以指定是否親自處理IP頭。至此,實際就可以開始對網路數據包進行嗅探了,對數據包的獲取仍象流式套接字或數據報套接字那樣通過recv()函數來完成。但是與其他兩種套接字不同的是,原始套接字此時捕獲到的數據包並不僅僅是單純的數據信息,而是包含有 IP頭、 TCP頭等信息頭的最原始的數據信息,這些信息保留了它在網路傳輸時的原貌。通過對這些在低層傳輸的原始信息的分析可以得到有關網路的一些信息。由於這些數據經過了網路層和傳輸層的打包,因此需要根據其附加的幀頭對數據包進行分析。下面先給出結構.數據包的總體結構: 數據包 IP頭 TCP頭(或其他信息頭) 數據 數據在從應用層到達傳輸層時,將添加TCP數據段頭,或是UDP數據段頭。其中UDP數據段頭比較簡單,由一個8位元組的頭和數據部分組成,具體格式如下: 16位 16位 源埠 目的埠 UDP長度 UDP校驗和 而TCP數據頭則比較復雜,以20個固定位元組開始,在固定頭後面還可以有一些長度不固定的可選項,下面給出TCP數據段頭的格式組成: 16位 16位 源埠 目的埠 順序號 確認號 TCP頭長 (保留)7位 URG ACK PSH RST SYN FIN 窗口大小 校驗和 緊急指針 可選項(0或更多的32位字) 數據(可選項) 對於此TCP數據段頭的分析在編程實現中可通過數據結構_TCP來定義: typedef struct _TCP{ WORD SrcPort; // 源埠 WORD DstPort; // 目的埠 DWORD SeqNum; // 順序號 DWORD AckNum; // 確認號 BYTE DataOff; // TCP頭長 BYTE Flags; // 標志(URG、ACK等) WORD Window; // 窗口大小 WORD Chksum; // 校驗和 WORD UrgPtr; // 緊急指針 } TCP; typedef TCP *LPTCP; typedef TCP UNALIGNED * ULPTCP; 在網路層,還要給TCP數據包添加一個IP數據段頭以組成IP數據報。IP數據頭以大端點機次序傳送,從左到右,版本欄位的高位位元組先傳輸(SPARC是大端點機;Pentium是小端點機)。如果是小端點機,就要在發送和接收時先行轉換然後才能進行傳輸。IP數據段頭格式如下: 16位 16位 版本 IHL 服務類型 總長 標識 標志 分段偏移 生命期 協議 頭校驗和 源地址 目的地址 選項(0或更多) 同樣,在實際編程中也需要通過一個數據結構來表示此IP數據段頭,下面給出此數據結構的定義: typedef struct _IP{ union{ BYTE Version; // 版本 BYTE HdrLen; // IHL }; BYTE ServiceType; // 服務類型 WORD TotalLen; // 總長 WORD ID; // 標識 union{ WORD Flags; // 標志 WORD FragOff; // 分段偏移 }; BYTE TimeToLive; // 生命期 BYTE Protocol; // 協議WORD HdrChksum; // 頭校驗和 DWORD SrcAddr; // 源地址 DWORD DstAddr; // 目的地址 BYTE Options; // 選項 } IP; typedef IP * LPIP; typedef IP UNALIGNED * ULPIP; 在明確了以上幾個數據段頭的組成結構後,就可以對捕獲到的數據包進行分析了。 嗅探器的具體實現 根據前面的設計思路,不難寫出網路嗅探器的實現代碼,下面就給出一個簡單的示例,該示例可以捕獲到所有經過本地網卡的數據包,並可從中分析出協議、IP源地址、IP目標地址、TCP源埠號、TCP目標埠號以及數據包長度等信息。由於前面已經將程序的設計流程講述的比較清楚了,因此這里就不在贅述了,下面就結合注釋對程序的具體是實現進行講解,同時為程序流程的清晰起見,去掉了錯誤檢查等保護性代碼。主要代碼實現清單為: // 檢查 Winsock 版本號,WSAData為WSADATA結構對象 WSAStartup(MAKEWORD(2, 2), &WSAData); // 創建原始套接字 sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)); // 設置IP頭操作選項,其中flag 設置為ture,親自對IP頭進行處理 setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)); // 獲取本機名 gethostname((char*)LocalName, sizeof(LocalName)-1); // 獲取本地 IP 地址 pHost = gethostbyname((char*)LocalName)); // 填充SOCKADDR_IN結構 addr_in.sin_addr = *(in_addr *)pHost->h_addr_list[0]; //IP addr_in.sin_family = AF_INET; addr_in.sin_port = htons(57274); // 把原始套接字sock 綁定到本地網卡地址上 bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in)); // dwValue為輸入輸出參數,為1時執行,0時取消 DWORD dwValue = 1; // 設置 SOCK_RAW 為SIO_RCVALL,以便接收所有的IP包。其中SIO_RCVALL // 的定義為: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) ioctlsocket(sock, SIO_RCVALL, &dwValue); 前面的工作基本上都是對原始套接字進行設置,在將原始套接字設置完畢,使其能按預期目的工作時,就可以通過recv()函數從網卡接收數據了,接收到的原始數據包存放在緩存RecvBuf[]中,緩沖區長度BUFFER_SIZE定義為65535。然後就可以根據前面對IP數據段頭、TCP數據段頭的結構描述而對捕獲的數據包進行分析: while (true) { // 接收原始數據包信息 int ret = recv(sock, RecvBuf, BUFFER_SIZE, 0); if (ret > 0) { // 對數據包進行分析,並輸出分析結果 ip = *(IP*)RecvBuf; tcp = *(TCP*)(RecvBuf + ip.HdrLen); TRACE("協議: %s\r\n",GetProtocolTxt(ip.Protocol)); TRACE("IP源地址: %s\r\n",inet_ntoa(*(in_addr*)&ip.SrcAddr)); TRACE("IP目標地址: %s\r\n",inet_ntoa(*(in_addr*)&ip.DstAddr)); TRACE("TCP源埠號: %d\r\n",tcp.SrcPort); TRACE("TCP目標埠號:%d\r\n",tcp.DstPort); TRACE("數據包長度: %d\r\n\r\n\r\n",ntohs(ip.TotalLen)); } } 其中,在進行協議分析時,使用了GetProtocolTxt()函數,該函數負責將IP包中的協議(數字標識的)轉化為文字輸出,該函數實現如下: #define PROTOCOL_STRING_ICMP_TXT "ICMP" #define PROTOCOL_STRING_TCP_TXT "TCP" #define PROTOCOL_STRING_UDP_TXT "UDP" #define PROTOCOL_STRING_SPX_TXT "SPX" #define PROTOCOL_STRING_NCP_TXT "NCP" #define PROTOCOL_STRING_UNKNOW_TXT "UNKNOW" …… CString CSnifferDlg::GetProtocolTxt(int Protocol) { switch (Protocol){ case IPPROTO_ICMP : //1 /* control message protocol */ return PROTOCOL_STRING_ICMP_TXT; case IPPROTO_TCP : //6 /* tcp */ return PROTOCOL_STRING_TCP_TXT; case IPPROTO_UDP : //17 /* user datagram protocol */ return PROTOCOL_STRING_UDP_TXT; default: return PROTOCOL_STRING_UNKNOW_TXT; } 最後,為了使程序能成功編譯,需要包含頭文件winsock2.h和ws2tcpip.h。在本示例中將分析結果用TRACE()宏進行輸出,在調試狀態下運行,得到的一個分析結果如下: 協議: UDP IP源地址: 172.168.1.5 IP目標地址: 172.168.1.255 TCP源埠號: 16707 TCP目標埠號:19522 數據包長度: 78 …… 協議: TCP IP源地址: 172.168.1.17 IP目標地址: 172.168.1.1 TCP源埠號: 19714 TCP目標埠號:10 數據包長度: 200 …… 從分析結果可以看出,此程序完全具備了嗅探器的數據捕獲以及對數據包的分析等基本功能。 小結 本文介紹的以原始套接字方式對網路數據進行捕獲的方法實現起來比較簡單,尤其是不需要編寫VxD虛擬設備驅動程序就可以實現抓包,使得其編寫過程變的非常簡便,但由於捕獲到的數據包頭不包含有幀信息,因此不能接收到與 IP 同屬網路層的其它數據包, 如 ARP數據包、RARP數據包等。在前面給出的示常式序中考慮到安全因素,沒有對數據包做進一步的分析,而是僅僅給出了對一般信息的分析方法。通過本文的介紹,可對原始套接字的使用方法以及TCP/IP協議結構原理等知識有一個基本的認識。
㈤ 在qq顯示ulp是什麼意思
最好截圖出來,你的表達不懂.
ulp可以代表藍牙,還有協議之類的.
你在哪兒看到的
㈥ 電信光纖寬頻總是掉線是怎麼回事
我的也是,原來電話線寬頻沒有問題,改了之後經常掉,而且必須重啟電腦,重啟路由和光貓都沒有用,嚴重時老是重啟電腦,煩死了!電信的來把網線直接接在主機上不用路由也掉,郁悶死了!
㈦ 光纖介面的光纖通道基礎
根據ANSI(美國國家標准協會)的規定,光纖通道作為某些上層協議(ULP專用的傳輸通道,應該支持IP,SCSI,HIPPI及其他高層協議等等。光纖通道不但在速度、距離和成本方面都有明顯的優點,而且只需要添加一個光纖通道適配器(HBA)就可以使用現有的操作系統和很多軟體。
FC-0(物理介面,physical interface)是FC協議的最底層。物理層定義了不同物理介質、傳輸距離,信號機制標准,也定義了除了光纖同軸電纜和雙絞線也可以作為傳輸介質。本層基本目的是發送和接收二進制(0,1)信號。FC-0定義了數據傳輸的速度,指傳輸的有效數據的速度,目前有400MB/s,200MB/s,100MB/s,若加上幀頭、編碼等額外數據,速率就是4Gb/s,2Gb/s,1Gb/s。FC-1層(Trannsmission Protocol,代碼層)是對FC-。層的加強層,利用底層的功能實現位元組或傳輸字的發送和接收。定義了基本傳輸信號的編碼解碼特殊字元和字元級的差錯控制,採用8B/1 OB編碼。FC-2層(Signaling Protocol,協議層)定義了編碼和解碼的標准、原語和傳輸字。功能是發送和接收幀、幀序列、幀交換和數據包等。也就是利用FC-1層的功能一次傳輸一串數據。提供了一些在端到端之間傳輸信息單元的規則和機制。FC-2層的功能包括幾種服務類型、幀格式的定義、序列分裝與重組、交換管理、地址分配、別名地址定義、多播管理等。FC-3層(Common Services,服務層)一個節點只有一個FC-3層,給節點的上層提供了公共服務,這些服務利用FC-2層的功能來實現。如FC協議棧的分層圖(b)所示。FC-4(Mapping level)是協議映射層,定義了FC與ULP層之間的介面。若上層應用層為SCSI協議,那麼FC-4層協議就是FCP協議。