Requests: νŠΉμ • IP 바인딩

에 λ§Œλ“  2012λ…„ 01μ›” 27일  Β·  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λ₯Ό μ‚¬μš©ν•˜μ—¬ 크둀러λ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ API μˆ˜μ€€μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

νŠΉμ • Host 헀더가 μžˆλŠ” IP둜 μš”μ²­μ„ 보낼 수 μ—†μŠ΅λ‹ˆκΉŒ?

μ•„λ‹ˆμš”, μ›Ή μ„œλ²„ λ‘œκ·Έμ— νŠΉμ • 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 번호λ₯Ό 톡해 λ‚˜κ°€λŠ” 경우 μ‘λ‹΅μ˜ 원본 ν•„λ“œμ— μ΄λŸ¬ν•œ λ‹€λ₯Έ 곡개 λ²ˆν˜Έκ°€ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 λ²”μœ„ 밖이라고 μƒκ°ν•©λ‹ˆλ‹€.

μ—¬μ „νžˆ 이것에 관심이 μžˆλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ urlib3의 HttpConnectionPool, 특히 μƒˆλ‘œμš΄ httplib/http.client HttpConnectionsκ°€ μŠ€ν•€μ—…λ˜μ–΄ source_addressλ₯Ό 전달할 수 μžˆλŠ” 곳을 μ‚΄νŽ΄λ³΄κ³  싢을 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ μš”μ²­μ˜ μš”μ²­ λͺ¨λΈμ—μ„œ 이것을 계속 λ…ΈμΆœν•˜κ³  μ›ν•˜λŠ” λŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Googleμ—μ„œ 여기에 λ„μ°©ν•˜λŠ” 경우 λ‹€μŒμ„ λ”°λ₯΄μ‹­μ‹œμ˜€. https://github.com/shazow/urllib3/issues/9#issuecomment -15871420

이것은 λ‹€μ‹œ μ—΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ²”μœ„ 밖이 μ•„λ‹ˆλ©° VPN λ‚΄λΆ€μ˜ ν˜ΈμŠ€νŠΈμ™€ μž‘μ—…ν•  λ•Œ 맀우 ν•„μš”ν•©λ‹ˆλ‹€.

ν˜„μž¬ 및 원격 λ„€νŠΈμ›Œν¬μ˜ μ£Όμ†Œ κ³΅κ°„μ˜ νŠΉμ„±μ— 따라 VPN이 μ„€μ •ν•œ μΈν„°νŽ˜μ΄μŠ€μ— λ°”μΈλ”©λœ IPμ—μ„œ μš”μ²­μ„ 보내야 ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. λ˜λŠ” λΌμš°νŒ… ν…Œμ΄λΈ”μ„ λ³€κ²½ν•˜μ‹­μ‹œμ˜€. 이것은 적어도 Macμ—μ„œ NetExtenderλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ— μ μš©λ©λ‹ˆλ‹€.

ssh 및 curlκ³Ό 같은 λ§Žμ€ λ„€νŠΈμ›Œν‚Ή ν”„λ‘œκ·Έλž¨μ€ μΈν„°νŽ˜μ΄μŠ€μ˜ IP에 바인딩/μ‚¬μš©ν•˜λ„λ‘ μΈν„°νŽ˜μ΄μŠ€ 섀정을 μ§€μ›ν•©λ‹ˆλ‹€.

@petri μš”μ²­ ν”„λ‘œμ νŠΈμ˜ λ²”μœ„κ°€ μ „μ μœΌλ‘œ Kenneth에 μ˜ν•΄ μ •μ˜λœλ‹€λŠ” 점을 κ°μ•ˆν•  λ•Œ 이것이 λ²”μœ„ 밖이

특히 핡심 μš”μ²­ ν”„λ‘œμ νŠΈμ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ κ²ƒμœΌλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—¬μ „νžˆ ν•  수 있으며 그리 어렡지도 μ•ŠμŠ΅λ‹ˆλ‹€. 이 ν† λ‘  μ—μ„œλŠ” 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법을 λ‹€λ£Ήλ‹ˆλ‹€.

λ‹ˆμŠ€ - μš”μ²­μ—μ„œ 그런 μ’…λ₯˜μ˜ λ©”μ»€λ‹ˆμ¦˜μ„ μ•Œμ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

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 λ“±κΈ‰