【精品】RAW協(xié)議是大多數打印設備的默認協(xié)議_第1頁
【精品】RAW協(xié)議是大多數打印設備的默認協(xié)議_第2頁
【精品】RAW協(xié)議是大多數打印設備的默認協(xié)議_第3頁
【精品】RAW協(xié)議是大多數打印設備的默認協(xié)議_第4頁
【精品】RAW協(xié)議是大多數打印設備的默認協(xié)議_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、raw協(xié)議是大多數打印設備的默認協(xié)議。為了發(fā)送raw格式的作業(yè),打印服務器將打開 一個針對打印機網絡接口的tcp流。對于許多設備來說,這個接口將是端口 910()。在創(chuàng) 建tcp/ip端口之j5, windows將按照rfc 1759 (printer mib),使用snmp來查詢設備的 對彖標識符(object identifier, 01d)。如果設備返冋了一個值,則解析系統(tǒng)文件tcpmon.ini 來尋找匹配項。如果打印機制造商提供了特定設備的特殊配置信息,則這些配置信息c經連 同配置設置一起創(chuàng)建就緒。例如,有些外部打印服務器接口支持多臺打印機(例如,具有3 個并行端口連接的hewlet

2、t packard jetdirect ex)。制造商可以使用不同的端口來指明應該將 某項作業(yè)提交給哪臺打印機(例如,將作業(yè)9102提交給端口 1,將作業(yè)9103提交給端口 2 等等)。這一功能對于需耍使用特殊端口名稱的打印服務器接口有所裨益,比如:某些ibm 網絡打印機上的pass端口。這里介紹windows sockets的-一些關于原始套接(raw socket)的編程。同winsockl和比, 最明顯的就是支持了 raw socket套接字類型,通過原始套接字,我們可以更加自如地控制 windows k的多種協(xié)議,而且能夠對網絡底層的傳輸機制進行控制。1、創(chuàng)建一個原始套接字,并設置ip

3、頭選項。socket sock;sock = socket(af_inet,sock_raw,ipproto_ip);或者:s = wsasoccket(af_inet,sock_raw,ipproto_ip,null,0,wsa_flag_overlapped);這里,我們設置了 sock_raw標志,表示我們聲明的是一個原始套接字類型。倉唯原 始套接字后,ip頭就會包含在接收的數據中,如果我們設定ip_hdrincl選項,那么,就 需要自己來構造ip頭。注意,如果設置ip_hdrincl選項,那么必須具有administrator權 限,耍不就必須修改注冊表:hkey_local_mach

4、lnesystemcurrentcontrolsetservicesafdparameter 修改鍵:disablerawsecurity (類型為dword),把值修改為1。如果沒有,就添加。bool blnflag=true;setsockopt(sock, ipproto_ip, ip_hdrincl, (char *)&blnflag, sizeof(blnflag);對于原始套接字在接收數據報的時候,要注意這么兒點:1、如果接收的數據報中協(xié)議類型和定義的原始套接字匹配,那么,接收的所有數據就拷貝 到套接字中。2、如果綁定了本地地址,那么只有接收數據ip頭屮對應的遠端地址匹配,

5、接收的數據就拷 貝到套接字中。3、如果定義的是外部地址,比如使用connect(),那么,只有接收數據ip頭中對應的源地址 匹配,接收的數據就拷貝到套接字屮。2、構造ip頭和tcp頭這里,提供ip頭和tcp頭的結構:/ standard tcp flags#define urg 0x20#define ack ox 10#define psh 0x08#define rst 0x04#define syn 0x02#define fin 0x01typedef structphdr定義 ip 首部unsigned char h_lenver; /4 位首部長度+4 位 ip 版本號 unsig

6、ned char tos; /8 位服務類型 tosunsigned short total_len; 16 位總長度(字節(jié)) unsigned short ident; /16 位標識unsigned short frag_and_flags; 3 位標丿忐位unsigned char ttl; /8 位生存時間 ttlunsigned char proto; /8 位協(xié)議(tcp, udp 或其他) unsigned short checksum; /16 位 ip 首部校驗和 unsigned int sourcelp; /32 位源 ip 地址 unsigned int destip;

7、 /32 位目的 ip 地址 ip_header;typedef stiuct psd_hdr /定義 tcp 偽首部unsigned long saddr; /源地址unsigned long daddr; /11 的地址char mbz;char ptcl; 協(xié)議類型unsigned short tcpl; /tcp 長度psd_header;typedef struct _tcphdr/定義 tcp 首部ushort th.sport; /16 位源端口ushort th.dport; 16 位日的端口 unsigned int th_seq; /32 位序列號 unsigned int

8、 th_ack; 32 位確認號 unsigned char thenres; /4位首部長度/6位保留字 unsigned char th_flag; /6 位標志位ushort th_win; /16 位窗 口人小ushort th_sum;/16 位校驗和ushort th_urp; 16位緊急數據偏移量 tcp_header;tcp偽首部并不是真正存在的,只是川于計算檢驗和。校驗和函數:ushort checksum(ushort buffer, int size) unsigned long cksum=0;while (size > 1)cksum += *buffer+;s

9、ize -= sizeof(ushort);if(size)cksum += *(uchar*)buffer;cksum = (cksum » 16) + (cksum & oxffff);cksum += (cksum »16);return (ushort)(cksum);當需要自己填充ip頭部和tcp頭部的時候,就同時需要h己計算他們的檢驗和03、發(fā)送原始套接字數據報填充這些頭部稍微麻煩點,發(fā)送就相對簡單多了。只需要使用sendto()就ok。sendto(sock, (char*)&tcpheader, sizeof(tcpheader), 0,(s

10、ockaddr*)&addr_in,sizeof(addr_in);下面是一個示例程序,可以作為syn掃描的一部分。#include#include#include#define source_port 7234#define max_receivebyte 255typedef struct ip_hd定義 ip 首部unsigned char h_verlen; /4 位首部長度,4 位 ip 版木號unsigned char tos; /8 位服務類型 tosunsigned short total_len; 16 位總長度(字節(jié))unsigned short ident; 16

11、 位標識unsigned short frag_and_flags; /3 位標丿忐位unsigned char ttl; /8 位生存時間 ttlunsigned char proto; /8 位協(xié)議(tcp, udp 或其他) unsigned short checksum; 16 位 ip 首部校驗和 unsigned int sourcelp; /32 位源 ip 地址 unsigned int destip; /32 位目的 ip 地址 ipheader;typedef stmct tsd_hdr 泄義 tcp 偽首部unsigned long saddr; 源地址unsigned

12、long daddr; 目的地址char mbz;char ptcl; 協(xié)議類型unsigned short tcpl; /tcp 長度(psdheader;typedef stmct tcp_hdr 定義 tcp 首部ushort th_sport; /16 位源端口ushort th_dport; 16 位目的端口 unsigned int th_seq; /32 位序列號 unsigned int th_ack; /32 位確認號unsigned char th_lenres; /4位首部長度/6位保留字 unsigned char th_flag; /6 位標志位ushort th_w

13、in; /16 位窗 口大小ushort th_sum; /16 位校驗和ushort th.urp; /16位緊急數據偏移屋 tcpheader;/checks um:計算校驗和的了函數ushort checksum(ushort buffer, int size)unsigned long cksuin=0;while(size >1)cksum+=*buffer+;size -=sizeof(ushort);)if(size)cksum += *(uchar*)buffer;cksum = (cksum » 16) + (cksum & oxffff); cksu

14、m += (cksum »16);return (ushort)(cksum);void useage()printf(1tcppinnm);printf("t written by refdomn");printf(ht email: refdom263.nean j;printf(nuseage: tcpping.exe target_ip target_port nh);printf(t f匕上匕匕匕寸.丄 *1*1* 卜 ( f x% > il 丿,int mciin(int argc, char* argv) wsadatawsadata;sock

15、et sock; sockaddrjn addr_in;ipheader ipheader; tcpheader tcpheader; psdheader psdheader;char szsendbuf60=0);bool flag;int re ct, nti me over;useage();if (argc!= 3) return false; if (wsastartup(makeword(2,2), &wsadata) !=0)printf(nwsastartup error!n");return false;)if(sock=wsasocket(af_inet,

16、sock_raw,ipproto_raw,null,0,wsa_flag_overlapped)=invalid_socket)printf(usocket setup error!nm);return false;flag=true;if (setsockopt(sock,ipproto_ip,ip_hdrincl,(char*)&flag,sizeof(flag)=socket_error)pri ntf("setsockopt 1p_hdr1ncl error !n “);return false;ntimeover=1000;if (setsockopt(sock,

17、sol_socket, so.sndtimeo, (char*)&ntimeover, sizeof(ntimeover)=socket_error)printf("setsockopt so_sndtimeo error!n");return false;addr_in.sin_family=af_inet;addr_in.sin_port=htons(atoi(argvf2);addr_in.sin_addr.s_un.s_addr=inet_addr(argvl);/填充ip首部ipheader.h_verlen=(4«4 i sizeof(iphe

18、ader)/sizeof(unsigned long);/ ipheader.los=0;ipheade 匚 total_len=htons(sizeof(ipheader)+sizeof(tqpheader);ipheader.ident=l;ipheade 匚 fra jand_flags=o;ipheader.ttl=12 8;ip he ade to=i pproto_tc p;ipheade 匚 checksum=o;ipheader.sourceip=inet_addr(">|< 地地址”);ipheade r.destip 二 inct_addr(

19、argv 1 );填充tcp首部tcpheader.th_dport=htons(atoi(argv2j);tcpheader.th_sport=htons(source_port); /源端 口號tcpheader.th_seq=htonl(ox 12345678);tcpheader.th_ack=o;tcpheade r.th_lenrcs 二(sizeof(tcpheader)/4vv4io);tcpheader.th_flag=2; />改這電來實現不同的標志位探測,2是syn, 1是fin, 16是ack 探測等等tcpheader.th_win=htons(512);tcp

20、header.th_urp=o;tcpheader.th_sum=o;psdheader.saddr=ipheade 匚 sourccip;psdheader.daddr=ipheader.destip;psdheader. mbz=0;psdheader.ptcl=ipproto_tcp;psdheade r.tcpl 二 ht()ns(sizeof(tcpheader);計算校驗和memcpy(szsendbuf, &psdheader, sizeof(psdheader);memcpy(szsendbuf+sizeof(psdheader), &tcpheader, si

21、zeof(tcpheader); tcpheader.th_sum=checksum(ushort *)szsendbuf,sizeof(psdheader)+sizeof(tcpheader);memcpy(szsendbuf5 &ipheader, sizeof(ipheader);memcpy(szsendbuf+sizeof(ipheader), &tcpheader, sizeof(tcpheader); memset(szsendbuf+sizeof(ipheader)+sizeof(tcpheader), 0, 4);ipheade匚checksum=checks

22、um(ushort *)szsendbuf, sizeof(ipheader)+sizeof(tcpheader);memcpy(szsendbuf, &ipheader, sizeof(ipheader);rect=sendto(sock, szsendbuf, sizeof(ipheader)+sizeof(tcpheader),0、(struct sockaddr*)&addr_in, sizeof(addr_in);if (rect=socket_error)printfc'send error !:%dn",wsagetlasterror();return false;elseprintf("send ok!nm);closesocket(so

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論