Apakah ada baris perintah, proxy HTTP generik (seperti Squid)?


9

Saya dapat dengan mudah menggunakan Netcat (atau, Socat) untuk menangkap lalu lintas antara browser saya dan port host: spesifik.

Tetapi untuk Linux, apakah ada rekan perintah-baris dari proxy HTTP seperti Squid yang dapat saya gunakan untuk menangkap lalu lintas antara klien HTTP saya (baik browser atau program baris perintah) dan host sewenang-wenang: port?


Jawaban:


8

Baik Perl dan Python (dan mungkin juga Ruby) memiliki kit sederhana yang dapat Anda gunakan untuk membuat proxy HTTP sederhana dengan cepat.

Di Perl, gunakan HTTP :: Proxy . Inilah contoh 3-baris dari dokumentasi. Tambahkan filter untuk memfilter, mencatat atau menulis ulang permintaan atau tanggapan; lihat dokumentasi sebagai contoh.

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;

Dalam Python, gunakan SimpleHTTPServer . Berikut ini beberapa contoh kode yang diadaptasi dari effbot . Adaptasi do_GETmetode (atau lainnya) untuk memfilter, mencatat atau menulis ulang permintaan atau tanggapan.

import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()

Saya percaya ini adalah jenis solusi yang saya cari. Terima kasih.
Harry

Python satu bekerja untuk saya untuk permintaan HTTP tetapi tampaknya tidak mendukung permintaan HTTPS.
Russell Silva


6

Ini mungkin bukan solusi terbaik, tetapi jika Anda menggunakan proxy apa pun maka itu akan memiliki spesifik host:portsehingga solusi netcat tetap berfungsi, meskipun Anda harus memisahkan meta-data proxy untuk memahami itu.

Cara termudah untuk melakukan ini mungkin menggunakan proxy anonimisasi acak apa pun di luar sana dan cukup salurkan semua lalu lintas netcat. (Yaitu, atur proxy browser Anda ke localhost:portdan kemudian teruskan data ke proxy yang sebenarnya.)

Jika Anda ingin memiliki proxy lokal maka proxy SOCKS5 dengan ssh -D <port> localhostmungkin merupakan opsi termudah Anda. Jelas, Anda harus memberi tahu browser Anda untuk menggunakan proxy "kaus kaki" daripada proxy "http".

Jadi, sesuatu seperti ini (dengan asumsi mesin lokal Anda menerima koneksi ssh masuk):

ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000

Secara alami, itu hanya akan berfungsi untuk satu upaya koneksi browser, dan kemudian keluar, dan saya belum mencoba meneruskan data yang dikembalikan ke browser, jadi Anda akan memerlukan netcatsolusi lengkap Anda .


Terima kasih. Apakah Anda memiliki saran nama untuk proxy anonimisasi untuk Linux? Saya lebih suka yang tidak seberat Squid (dalam hal ukuran, memori, kecepatan startup), dapat dijalankan oleh non- rootpengguna, dll.
Harry

Juga, saya tidak mengikuti contoh proxy SOCKS5 Anda. Bisakah Anda jelaskan apa yang terjadi dengan 2 doa di atas? Saya, misalnya tahu bahwa ssh -fN -D ...memulai proxy SOCKS5 pada localhostport 8000, tetapi apa fungsinya nc -l ...? Dan, ke port mana saya harus mengarahkan browser saya ke: 8000atau 8080?
Harry

2
@harry untuk proxy anomization lihat privoksi
Ulrich Dangel

1
Ketika saya mengatakan "proxy anonimisasi", saya tidak bermaksud sesuatu yang Anda buat sendiri: Maksud saya proxy yang ada di luar sana di internet. @UlrichDangel menyarankan privoxy dan saya yakin ada orang lain juga.
ams

The ncperintah menerima semua lalu lintas dari port 8080 dan meneruskannya ke 8000. Saya tidak memberikan penuh netcatsolusi karena posting Anda menyarankan Anda sudah tahu bagaimana melakukan bagian itu.
ams
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.