查看積分策略說明發表回覆
Discuz! 代碼
提示插入
直接插入
說明訊息

插入粗體文本 插入斜體文本 插入下劃線 置中對齊 插入超級連結 插入信件位址 插入圖像 插入 flash 插入代碼 插入引言 插入列表
刪除線 直線分隔線 虛線分隔線
    
添加文字底框
內容 [字數檢查]:

表情符號

更多 Smilies
字型大小 |||
溫馨提示:本區開放遊客瀏覽。


文章關鍵字 : [功能說明]
(關鍵字可加強搜索準確性, 如關鍵字多於一組, 請以 , 作分隔, e.g. : 阿笨,shiuh,第一笨)

 關閉 URL 識別 | html 禁用
 關閉 表情符號 | 表情符號 可用
 關閉 Discuz! 代碼 | Discuz! 代碼 可用
使用個人簽名
接收新回覆信件通知
推薦放檔網絡空間

檔案(Torent, zip等)
  1. freedl
  2. multiupload
  3. btghost
  4. 便當狗
  5. mediafire
  6. pillowangel
圖片(JPG, GIF等)
  1. hotimg
  2. tinypic
  3. mousems2
  4. imageshack
  5. imm.io
>>>歡迎推薦好用空間


最新10篇文章回顧
charleshwu

 發表於 2017-10-9 06:26 PM

有跟我一樣有在下載免空的朋友嗎?也許你會跟我一樣常常遇到頻寬限制,這時就會需要換一個 IP 了。

假如你也是跟我一樣用 PPPOE 連線,你可以寫一個批次檔來呼叫 rasphone 或 rasdial 來重新連線,但有時候你會拿到跟剛剛一樣的 IP,在斷線與連線之間插入一些約幾十秒的等待可以降低 IP 一樣的機率,但這樣會需要多花時間。

這裡分享一個自己寫的更換 IP 程式,它會檢查目前的 IP,然後呼叫更換 IP 的批次檔,然後再檢查一次IP,直到這個 IP 是新的,或是已經好一段時間沒用過。

純心得分享,所以附上所有原始碼,歡迎有需要的朋友自行取用。

****記得使用前要修改一下 DoRedial.bat 的內容以配合你的 PPPoE 設定

主程式 : Redial_NewIP_V0.1.pl ====

#!/usr/bin/perl
use strict;
use LWP;
use DB_File;

$|=1;

my $nTime_=time();
my $nOldEnough_=7200;

my %hDB_IP_Time;

my $stIP_Time='IP_Time.DB';
tie(%hDB_IP_Time, 'DB_File', $stIP_Time)
      or die "Can't tie $stIP_Time: $!";

use LWP::UserAgent;
my $oLWP_=LWP::UserAgent->new(agent => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

sub HttpGetWithProxy{
        my ($oLWP,$stURL,$stProxy)=@_;
       
        #print Dumper([($oLWP,$stURL,$stProxy)]);
        #$oLWP->no_proxy();
        $oLWP->proxy('http',$stProxy?$stProxy:"");
        my $oResponse=$oLWP->get($stURL);
        return $oResponse->is_success?$oResponse->content:undef
}

sub CheckIPWithProxy{
        my ($oLWP,$stProxy)=@_;

        my $stURL_="http://checkip.dyndns.org/";
       
        my $stWebIPCheck=HttpGetWithProxy($oLWP,$stURL_,$stProxy);
        my ($stIPAddr)=$stWebIPCheck=~/^<html><head><title>Current IP Check<\/title><\/head><body>Current IP Address: ([0-9.]+)/;
        return $stIPAddr;
}


sub ChangeIP {
        my ($oLWP,$stIP)=@_;
        print "Old IP=>$stIP\n";
       
        my $iIpAge;
       
        $hDB_IP_Time{$stIP}=$nTime_;

        my $stCmdChgIP='cmd /c DoRedial.bat';
       
        my $stProxy='';
        my $nLoopCnt=0;
       
        while (1) {
               
                system($stCmdChgIP);
               
                $stIP=CheckIPWithProxy($oLWP,$stProxy);
               
                print "Now IP=>".$stIP."\n";
               
                if (!exists($hDB_IP_Time{$stIP})) {
                        print "New IP.\n";
                        last;
                }

                $iIpAge=$nTime_-$hDB_IP_Time{$stIP};
                print "IP Age=$iIpAge\n";
                if ($iIpAge>$nOldEnough_) {
                        last;
                }
                       
                if (++$nLoopCnt>10) {
                        print "Giveup\n";
                        last;
                }
                print "Redial #$nLoopCnt...\n";
        }       
        $hDB_IP_Time{$stIP}=$nTime_;
        print "Done\n";
}

print "Checking...\n";
my $stIp_=CheckIPWithProxy($oLWP_,'');
#print "IP=>".$stIp_."\n";
ChangeIP($oLWP_,$stIp_);
exit;

換 IP 的批次檔 DoRedial.bat ====
@Echo Off
rasdial.exe seednet /DISCONNECT
rasdial.exe seednet seednet seednet





所在時區為 GMT+8, 現在時間是 2020-9-23 04:51 PM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.016899 second(s), 6 queries , Qzip disabled