Requests: ربط عنوان IP معين

تم إنشاؤها على ٢٧ يناير ٢٠١٢  ·  15تعليقات  ·  مصدر: psf/requests

سيكون من الرائع أن تكون قادرًا على ربط عنوان IP معين كعنوان المصدر (للمضيفين الذين لديهم عناوين IP متعددة).

التعليق الأكثر فائدة

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()

إذا خرجت حركة المرور من رقمي IP المصدر من خلال رقمين مختلفين من أرقام IP العامة ، يجب على المرء أن يرى هذه الأرقام العامة المختلفة في الحقل الأصلي للاستجابة.

ال 15 كومينتر

مثير للإعجاب. كيف تصور الاستخدام؟

^ shazow / urllib3 # 9

الهدف هو كتابة برنامج تتبع الارتباطات باستخدام عنوان IP مرتبط بدولة معينة. لكنني لا أعرف كيف سيتم استخدامه على مستوى واجهة برمجة التطبيقات.

ألا يمكنك فقط إرسال طلب إلى عنوان IP برأس Host ؟

لا ، لأنه يحتوي على عنوان IP المحدد في سجل خادم الويب (يتم عكسه إلى بلد معين باستخدام أدوات مثل GeoIP).

أنا لا أتبع.

>>> 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()

إذا خرجت حركة المرور من رقمي IP المصدر من خلال رقمين مختلفين من أرقام IP العامة ، يجب على المرء أن يرى هذه الأرقام العامة المختلفة في الحقل الأصلي للاستجابة.

أعتقد أن هذا خارج النطاق.

بالنسبة للأشخاص المهتمين بهذا الأمر ، قد ترغب في إلقاء نظرة على HttpConnectionPool urlib3 ، لا سيما حيث تم نسج HTplib / http.client HttpConnections حتى تتمكن من المرور في source_address. إذا قمت بذلك ، فيمكنك الاستمرار في عرض هذا في نموذج طلب الطلب ، واستخدامه كما يحلو لك.

لأولئك الذين يصلون إلى هنا من جوجل ، سوف ترغب في اتباع هذا: https://github.com/shazow/urllib3/issues/9#issuecomment -15871420

يجب إعادة فتح هذا - فهو ليس خارج النطاق ، وهو ضروري تمامًا عند العمل مع مضيفين داخل VPN.

اعتمادًا على تفاصيل مساحات العناوين للشبكة الحالية والبعيدة ، غالبًا ما يتعين على المرء إرسال طلبات من عنوان IP مرتبط بالواجهة التي تم إعدادها بواسطة VPN. أو قم بإجراء تغييرات على جدول التوجيه. ينطبق هذا على الأقل على استخدام NetExtender على جهاز Mac.

تدعم العديد من برامج الشبكات مثل ssh و curl تعيين الواجهة لاستخدام / الارتباط بـ IP للواجهة.

petri تأكيدك على أن هذا ليس خارج النطاق غير صحيح ، نظرًا لأن نطاق مشروع الطلبات محدد تمامًا بواسطة كينيث. =)

على وجه التحديد ، نعتبره خارج نطاق مشروع الطلبات الأساسية. ومع ذلك ، لا يزال بإمكانك القيام بذلك ، وهو ليس بالأمر الصعب للغاية. تتناول هذه المناقشة كيفية القيام بذلك.

لطيف - لم أكن على علم بهذا النوع من الآلية في الطلبات. شكرا!

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()

إذا خرجت حركة المرور من رقمي IP المصدر من خلال رقمين مختلفين من أرقام IP العامة ، يجب على المرء أن يرى هذه الأرقام العامة المختلفة في الحقل الأصلي للاستجابة.

أردت فقط أن تعرف أنني كنت أتصفح الإنترنت إلى الأبد وكان هذا هو الحل الوحيد الذي نجح معي.

https://toolbelt.readthedocs.io/en/latest/adapters.html#sourceaddressadapter موجود وهو أقل بكثير من الاختراق

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات