Requests: Mengikat IP tertentu

Dibuat pada 27 Jan 2012  ·  15Komentar  ·  Sumber: psf/requests

Akan sangat bagus untuk dapat mengikat IP tertentu sebagai alamat sumber (untuk host dengan beberapa alamat IP).

Komentar yang paling membantu

import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Jika lalu lintas keluar dari dua nomor ip sumber keluar melalui dua nomor ip publik yang berbeda, seseorang akan melihat nomor publik yang berbeda ini di bidang asal respons.

Semua 15 komentar

Menarik. Bagaimana Anda membayangkan penggunaannya?

^ shazow/urllib3#9

Tujuannya adalah untuk menulis crawler menggunakan IP yang terkait dengan negara tertentu. Tapi saya tidak tahu bagaimana itu akan digunakan pada level API.

Tidak bisakah Anda mengirim permintaan ke IP dengan header Host ?

Tidak, karena itu untuk memiliki IP tertentu di log server web (untuk dibalik ke negara tertentu menggunakan alat seperti GeoIP).

Saya tidak mengikuti.

>>> requests.get('http://184.106.67.239', headers={'host': 'ci.kennethreitz.com'})
<Response [200]>
import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Jika lalu lintas keluar dari dua nomor ip sumber keluar melalui dua nomor ip publik yang berbeda, seseorang akan melihat nomor publik yang berbeda ini di bidang asal respons.

Saya pikir ini di luar jangkauan.

Bagi orang yang masih tertarik dengan ini, Anda mungkin ingin melihat HttpConnectionPool urlib3, khususnya di mana httplib/http.client HttpConnections baru diputar sehingga Anda dapat meneruskan source_address. Jika Anda melakukannya, maka Anda dapat terus mengekspos ini dalam model Permintaan permintaan, dan menggunakannya sesuai keinginan.

Bagi mereka yang tiba di sini dari google, Anda akan ingin mengikuti ini: https://github.com/shazow/urllib3/issues/9#issuecomment -15871420

Ini harus dibuka kembali - ini tidak di luar jangkauan, dan ini sangat diperlukan saat bekerja dengan host di dalam VPN.

Bergantung pada spesifik ruang alamat jaringan saat ini & jaringan jarak jauh, seseorang sering kali harus mengirim permintaan dari IP yang terikat ke antarmuka yang diatur oleh VPN. Atau buat perubahan pada tabel perutean. Ini berlaku setidaknya untuk menggunakan NetExtender di Mac.

Banyak program jaringan seperti ssh dan curl mendukung pengaturan antarmuka untuk menggunakan / mengikat IP suatu antarmuka.

@petri Pernyataan Anda bahwa ini tidak di luar cakupan tidak benar, mengingat ruang lingkup proyek Permintaan ditentukan sepenuhnya oleh Kenneth. =)

Secara khusus, kami melihatnya sebagai di luar cakupan proyek permintaan inti. Namun, Anda masih bisa melakukannya, dan itu bahkan tidak terlalu sulit. Diskusi ini mencakup bagaimana melakukannya.

Bagus - Saya tidak mengetahui mekanisme semacam itu dalam permintaan. Terima kasih!

import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Jika lalu lintas keluar dari dua nomor ip sumber keluar melalui dua nomor ip publik yang berbeda, seseorang akan melihat nomor publik yang berbeda ini di bidang asal respons.

Hanya ingin Anda tahu bahwa saya telah menjelajahi internet selamanya dan ini adalah satu-satunya solusi yang berhasil untuk saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat