荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: kid (晤), 信区: Program
标  题: 如何突破网关的种种限制与外界自由通讯(1)
发信站: 荔园晨风BBS站 (Sun Mar 31 09:37:03 2002), 转信

发信人: XSL (eXtentedStyleLanguage), 信区: XML
标  题: 如何突破网关的种种限制与外界自由通讯(1)
发信站: 逸仙时空 Yat-sen (Fri Oct 19 13:09:49 2001) , 站内信件

如何突破网关的种种限制与外界自由通讯
作者:ey4s<ey4s@21cn.com>

<<第一部分:欺骗网关上QQ>>
首先感谢shotgun<shotgun@xici.net>,没有他的帮助不会有这第一部分:)
QQ乃朋友之间交流,和MM沟通感情必备之品,少了它怎么能行呢,呵呵。但是通常

司为了提高员工的工作效率,会禁止员工在工作时间上QQ。一是从行政上制裁,如
发现


次扣xxx工资之类,二是从技术上封锁,例如在网关上做些限制。当然这样做无可
厚非,


以理解。但是下了班之后,通常封锁仍然不会打开,这样就很不爽了。这时候想要
上QQ


可就要自己想办法了。
OK!正所谓知己知彼,百战不殆!如果我们知道网关是通过什么技术来封锁的话,
那么
要突破就相对容易多了。OK!先换个角度来想想,假如我们是网管,我们会怎么样
来封锁


QQ用的是UDP协议,默认是用4000端口与外界通讯,那么我们在网关上把 源端口是
4000

的UDP包丢弃就可以实现封闭QQ的目的了,呵呵。我们公司的网关就是这样干的,
把源端

口是4000-4010的UDP包丢弃。怎么突破?哈哈,很简单,我们让QQ不用4000端口就
OK
了。怎么改端口呢?直接改很麻烦,我不知道,呵呵,但我们可以间接的改啊。
QQ默认


用4000端口,如果4000被占用的话,那么它就会用4001,类推。OK!那我们在启动
QQ之
前,先把UDP 4000-4010端口都占用掉,那么QQ启动的时候,就会顺理成章的使用
4011
端口了。很简单,不是吗?呵呵,那我们就来写个小程序实现这个目的。
程序代码如下:
/***********************************************************************
****
**
*
Module:BindUDP.c
Author:ey4s<ey4s@21cn.com>
Date:2001/6/2
http://eyas.3322.net
************************************************************************
****
**
/
#include <stdio.h>
#include <conio.h>
#include <winsock2.h>

#define MaxNum 20

#pragma comment(lib,"ws2_32.lib")

void ShowError(char *);

int main(int argc,char **argv)
{
WSADATA wsd;
int iRet,i,j=0,
iStart=4000,iEnd=4019;//默认占用UDP 4000-4019的端口
SOCKET s[MaxNum];
struct sockaddr_in addr;

//也可以让用户提供参数
if(argc==3)
{
iStart=atoi(argv[1]);
iEnd=atoi(argv[2]);
}
else if(argc!=1)
{
printf("\nUsage:%s <UDPStartPort> <ENDPort>",argv[0]);
return 1;
}
__try
{
//load winsock library
iRet=WSAStartup(MAKEWORD(1,1),&wsd);
if(iRet!=0)
{
ShowError("WSAStartup");
__leave;
}
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=INADDR_ANY;
for(i=iStart;i<=iEnd;i++,j++)
{
if(j>=MaxNum)
break;
//创建一个UDP socket
s[j]=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(s[j]==INVALID_SOCKET)
{
ShowError("\nCreate UDP socket");
__leave;
}
addr.sin_port=htons(i);
//bind udp socket
iRet=bind(s[j],(struct sockaddr *)&addr,sizeof(addr));
if(iRet==SOCKET_ERROR)
{
printf("\nBind UDP port %d failed.",i);
continue;
}
else
printf("\nBind UDP port %d ok.",i);
}
printf("\nPress any key to exit.");
getch();
}
__finally
{
for(j=0;j<MaxNum;j++)
closesocket(s[j]);
WSACleanup();
}
return 0;
}

void ShowError(char *msg)
{
printf("\n%s failed:%d.",GetLastError());
}
////////////////////////////////////////////////////////////////////////
////
//
/
程序在VC++6.0环境下编译,编译好的程序在http://eyas.3322.net有下载。
如果网管很恶毒,把全部UDP数据包都丢弃,那么我们这招就失灵了。怎么办?有
办法。

呵呵,请看下一篇。


void ShowError(char *msg)
{
printf("\n%s failed:%d.",GetLastError());                           ·
}                                                                 ·
/////////////////////////////////////////////////////////////     〇////
////                                                              ·
//                                                              ︵()︵
/                                                               ︶()︶
程序在VC++6.0环境下编译,编译好的程序在http://eyas.3322.net有 ╬·╬·╬
如果网管很恶毒,把全部UDP数据包都丢弃,那么我们这招         ╬·╬╬╬·╬
办法。                                                ︵()︵ ╬╬平安╬╬ ︵()︵
                                                      ︶()︶╬·╬╬╬·╬︶()︶
呵呵,请看下一篇。




--
※ 来源:.逸仙时空 Yat-senWWW bbs.zsu.edu.cn. [FROM: 192.168.45.225]

--




[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店