版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、raw协议是大多数打印设备的默认协议。为了发送raw格式的作业,打印服务器将打开 一个针对打印机网络接口的tcp流。对于许多设备来说,这个接口将是端口 910()。在创 建tcp/ip端口之j5, windows将按照rfc 1759 (printer mib),使用snmp來查询设备的 对彖标识符(object identifier, 01d)。如果设备返冋了一个值,则解析系统文件tcpmon.ini 來寻找匹配项。如果打印机制造商提供了特定设备的特殊配置信息,则这些配置信息c经连 同配置设置一起创建就绪。例如,有些外部打印服务器接口支持多台打印机(例如,具有3 个并行端口连接的hewlet
2、t packard jetdirect ex)。制造商可以使用不同的端口来指明应该将 某项作业提交给哪台打印机(例如,将作业9102提交给端口 1,将作业9103提交给端口 2 等等)。这一功能对于需耍使用特殊端口名称的打印服务器接口有所裨益,比如:某些ibm 网络打印机上的pass端口。这里介绍windows sockets的-一些关于原始套接(raw socket)的编程。同winsockl和比, 最明显的就是支持了 raw socket套接字类型,通过原始套接字,我们可以更加自如地控制 windows k的多种协议,而且能够对网络底层的传输机制进行控制。1、创建一个原始套接字,并设置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、如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝 到套接字中。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 位总长度(字节) unsigned short ident; /16 位标识unsigned short frag_and_flags; 3 位标丿忐位unsigned char ttl; /8 位生存时间 ttlunsigned char proto; /8 位协议(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; 协议类型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、发送原始套接字数据报填充这些头部稍微麻烦点,发送就相对简单多了。只需要使用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 位总长度(字节)unsigned short ident; 16
11、 位标识unsigned short frag_and_flags; /3 位标丿忐位unsigned char ttl; /8 位生存时间 ttlunsigned char proto; /8 位协议(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; 协议类型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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 村级小市场管理制度(3篇)
- 现代种业园区管理制度(3篇)
- 疫情期间员工工作管理制度(3篇)
- 管理制度方法和技巧论文(3篇)
- 观光农场常态化管理制度(3篇)
- 酒店前台经理员工管理制度(3篇)
- 长沙无人机管理制度(3篇)
- 纳税风险管控培训课件
- 《GAT 1054.7-2017公安数据元限定词(7)》专题研究报告
- 养老院护理服务质量规范制度
- 深圳加油站建设项目可行性研究报告
- 浙江省交通设工程质量检测和工程材料试验收费标准版浙价服定稿版
- GB/T 33092-2016皮带运输机清扫器聚氨酯刮刀
- 中学主题班会课:期末考试应试技巧点拨(共34张PPT)
- 红楼梦研究最新课件
- 吊索具报废标准
- 给纪检监察部门举报材料
- 低压电工安全技术操作规程
- 新增影像1spm12初学者指南.starters guide
- GA∕T 1577-2019 法庭科学 制式枪弹种类识别规范
- 水环境保护课程设计报告
评论
0/150
提交评论