2013-01-09 26 views
-3

對不起,如果我的英語不好。 我想寫一個程序,可以每15秒打開一次該網站。但是用不同的IP來做。這意味着獲得一個IP列表,並每隔15秒打開一個網站。你是怎麼做到的?我應該使用什麼模塊?謝謝你每隔15秒用不同IP打開一個網站

+1

我想你的意思是通過HTTP的網站?要澄清的主要問題是您的意思是每15秒鐘有一個不同的網站IP地址,還是不同的源IP地址(即客戶端IP地址)?如果您的意思是客戶端IP地址,那麼除非您運行的主機擁有大量地址,否則您無法這麼做。 – Cartroo

+0

謝謝親愛的Cartoo。我想爲一個網站(目標)編寫此程序,然後在我的電腦或我的VPS上運行該程序,以便每隔15秒打開一次該網站:x –

+5

這聽起來像是對我有惡意。 –

回答

2

如果你問如何確保每隔15秒發射一個連接,即使每個連接可能需要幾秒鐘(甚至可能超過15秒),那也很容易。既然你每15秒只做一次連接,真的沒有理由不爲每個連接產生一個線程。

所以:

def connectToSiteFunction(ip): 
    # your code to bind ip (if it's a source) or connect to it (if it's a dst) 
    # and do your thing here 

def connectAndWait(): 
    for ip in ips: 
     t = threading.Thread(target=connectToSiteFunction, args=(ip,)) 
     yield t 
     t.start() 
     os.sleep(15) 

threads = [t for t in connectAndWait()] 
for t in threads: 
    t.join() 

如果你在談論的目的地IP地址,和你想知道如何使用每個請求一個不同的......好吧,你通常只需要修改URL。事情是這樣的:

def connectToSiteFunction(ip): 
    url = 'http://{}/path/to/page.html'.format(ip) 
    # now open url as normal 

如果你問如何將源地址與您所選擇的網址,下載庫綁定,你必須告訴我們哪些庫,但其中之一的庫將有一個參數它,或者它將有一種方法讓你指定一個socket工廠,否則這將是不可能的(除非你想用你自己的工廠monkeatch socket.socket)。如果它讓你指定一個socket工廠,這樣做的方式是這樣的:

def make_socket_factory(srcip): 
    def socket_factory(): 
     s = socket.socket() 
     s.bind((srcip, 0)) 
     return s 
    return socket_factory 

然後,只需在make_socket_factory(srcip)通過爲工廠。

如果你想知道如何下載網址在首位......有很多的方法可以做到這一點,從STDLIB urllib2requestspycurltwisted,並且已經有很多答案對SO(和其他地方)比較和對比它們。