求代码:
VB实时监听端口(如80、21),获取连接本机的IP,同时写入txt文件VB新手,求完整的代码。用Winsock数组、API均可,谢谢!
写得好可以再加分

解决方案 »

  1.   

    用Timer控件每隔一定时间(比如10秒)调用下面的语句
    shell("echo %time%&netstat -na | find "+chr(34)+":80 "+chr(34)+" >>port80_21.log");
    shell("echo %time%&netstat -na | find "+chr(34)+":21 "+chr(34)+" >>port80_21.log");
    结果在port80_21.log中
      

  2.   

    在vb用shell可以使用bat的命令吗?.我试过了这两个语句不行啊(去了后面的分号也不行)..
    shell应该是调用某个程序,不能调用命令吧..
    我看如果要这样实现的话可以创建一个bat文件在里面写入上面echo的命令.
    在程序执行中就如上面说的用Timer控件每隔一定时间(比如10秒)调用该bat文件.
    执行完就把文件删除掉.
      

  3.   

    shell "cmd /c echo %time%&netstat -na | find "+chr(34)+":80 "+chr(34)+" >>port80_21.log"
    shell "cmd /c echo %time%&netstat -na | find "+chr(34)+":21 "+chr(34)+" >>port80_21.log"
      

  4.   


    shell "cmd /c echo %time%&netstat -na | find "+chr(34)+":80 "+chr(34)+" >>port80_21.log"得到的是:  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
      TCP    127.0.0.1:80           127.0.0.1:1074         TIME_WAIT
      TCP    127.0.0.1:80           127.0.0.1:1075         TIME_WAIT
      TCP    127.0.0.1:80           127.0.0.1:1076         TIME_WAIT
      TCP    192.168.1.166:80       192.168.1.166:1081     ESTABLISHED
      TCP    192.168.1.166:80       192.168.1.166:1082     ESTABLISHED
      TCP    192.168.1.166:80       192.168.1.166:1083     ESTABLISHED
      TCP    192.168.1.166:80       192.168.1.166:1084     ESTABLISHED
      TCP    192.168.1.166:80       192.168.1.166:1085     ESTABLISHED
      TCP    192.168.1.166:80       192.168.1.166:1086     ESTABLISHED
      TCP    192.168.1.166:1081     192.168.1.166:80       ESTABLISHED
      TCP    192.168.1.166:1082     192.168.1.166:80       ESTABLISHED
      TCP    192.168.1.166:1083     192.168.1.166:80       ESTABLISHED
      TCP    192.168.1.166:1084     192.168.1.166:80       ESTABLISHED
      TCP    192.168.1.166:1085     192.168.1.166:80       ESTABLISHED
      TCP    192.168.1.166:1086     192.168.1.166:80       ESTABLISHED
    请问怎么才能只获得IP,没有端口、状态这些内容?而且IP不重复记录呢??
      

  5.   

    #安装ActivePerl
    #在VB里面利用Timer控件每隔几秒
    #shell("cmd /c echo %time%&netstat -na >>netstat.log")
    #shell("cmd /c perl.exe getdistip.pl netstat.log >distip.log")
    #结果在distip.log中
    while (<>) {
        chomp;
        #print "$_\n";
        my($Proto,$LocalIP,$LocalPort,$ForeignIP,$ForeignPort,$State)=/\s+(TCP)\s+(\d+\.\d+\.\d+\.\d+):(\d+)\s+(\d+\.\d+\.\d+\.\d+):(\d+)\s+(\w+)/;
        #print "Proto=$Proto,LocalIP=$LocalIP,LocalPort=$LocalPort,ForeignIP=$ForeignIP,ForeignPort=$ForeignPort,State=$State\n";
        if ($ForeignPort eq "80" || $ForeignPort eq "21") {
            $distForeignIP{$ForeignIP}=1;
        }
        if ($LocalPort eq "80" || $LocalPort eq "21") {
            $distLocalIP{$LocalIP}=1;
        }
    }
    foreach $key (sort keys %distForeignIP) {
        print "$key\n";
    }
    foreach $key (sort keys %distLocalIP) {
        print "$key\n";
    }