วิธีทำสำเนาปริมาณข้อมูล TCP กับเซิร์ฟเวอร์ระยะไกลหนึ่งตัวหรือหลายตัวเพื่อการเปรียบเทียบ?


30

โครงสร้างพื้นฐาน: เซิร์ฟเวอร์ใน Datacenter, ระบบปฏิบัติการ - Debian Squeeze, เว็บเซิร์ฟเวอร์ - Apache 2.2.16


สถานการณ์:

cusotmers ของเราใช้งานเซิร์ฟเวอร์สดทุกวันซึ่งทำให้ไม่สามารถทดสอบการปรับปรุงและปรับปรุงได้ ดังนั้นเราจึงต้องการทำซ้ำทราฟฟิก HTTP ขาเข้าบนเซิร์ฟเวอร์ที่ใช้งานจริงไปยังเซิร์ฟเวอร์ระยะไกลหนึ่งหรือหลายเครื่องแบบเรียลไทม์ ปริมาณการใช้งานจะต้องถูกส่งผ่านไปยังเว็บเซิร์ฟเวอร์ท้องถิ่น (ในกรณีนี้ Apache) และไปยังเซิร์ฟเวอร์ระยะไกล ดังนั้นเราสามารถปรับการกำหนดค่าและใช้รหัสที่แตกต่าง / อัปเดตบนเซิร์ฟเวอร์ระยะไกลสำหรับการเปรียบเทียบและเปรียบเทียบกับเซิร์ฟเวอร์สดปัจจุบัน ขณะนี้เว็บเซิร์ฟเวอร์กำลังฟังเพลงโดยประมาณ 60 พอร์ตเพิ่มเติมนอกเหนือจาก 80 และ 443 เนื่องจากโครงสร้างไคลเอนต์


คำถาม: การทำซ้ำนี้ไปยังเซิร์ฟเวอร์ระยะไกลหนึ่งหรือหลายเครื่องสามารถนำไปใช้อย่างไร

เราได้ลองแล้ว:

  • agnoster โรเนียว - นี่จะต้องเปิดหนึ่งเซสชันต่อพอร์ตซึ่งไม่สามารถใช้ได้ ( https://github.com/agnoster/duplicator )
  • kklis proxy - ส่งต่อทราฟฟิกไปยังรีโมตเซิร์ฟเวอร์เท่านั้น แต่จะไม่ส่งต่อไปยัง logh webserver ( https://github.com/kklis/proxy )
  • iptables - DNAT จะส่งต่อปริมาณข้อมูลเท่านั้น แต่จะไม่ส่งต่อไปยังเว็บเซิร์ฟเวอร์ท้องถิ่น
  • iptables - TEE ทำซ้ำเฉพาะกับเซิร์ฟเวอร์ในเครือข่ายท้องถิ่น -> เซิร์ฟเวอร์ไม่ได้อยู่ในเครือข่ายเดียวกันเนื่องจากโครงสร้างของดาต้าเซ็นเตอร์
  • ทางเลือกที่แนะนำสำหรับคำถาม "การรับส่งข้อมูล TCP ซ้ำกับพร็อกซี" ที่ stackoverflow ( https://stackoverflow.com/questions/7247668/duplicate-tcp-traffic-with-a-proxy ) ดังที่กล่าวไว้ TEE ไม่ทำงานกับเซิร์ฟเวอร์ระยะไกลนอกเครือข่ายท้องถิ่น teeproxy ไม่สามารถใช้งานได้อีกต่อไป ( https://github.com/chrislusf/tee-proxy ) และเราไม่พบที่อื่น
  • เราได้เพิ่มที่อยู่ IP ที่สอง (ซึ่งอยู่ในเครือข่ายเดียวกัน) และกำหนดให้กับ eth0: 0 (ที่อยู่ IP หลักถูกกำหนดให้กับ eth0) ไม่ประสบความสำเร็จในการรวม IP ใหม่หรืออินเตอร์เฟสเสมือน eth0: 0 กับฟังก์ชันหรือเส้นทาง iptables TEE
  • ทางเลือกที่แนะนำสำหรับคำถาม "การรับส่งข้อมูล tcp ซ้ำ ๆ บนเดเบียนบีบ" ( ทำซ้ำการรับส่งข้อมูล TCP ขาเข้าบน Debian Squeeze ) ไม่สำเร็จ เซสชัน cat | nc (cat / tmp / prodpipe | nc 127.0.0.1 12345 และ cat / tmp / testpipe | nc 127.0.0.1 23456) ถูกขัดจังหวะหลังจากทุกคำขอ / เชื่อมต่อโดยไคลเอนต์โดยไม่มีการแจ้งเตือนหรือบันทึก Keepalive ไม่ได้เปลี่ยนสถานการณ์นี้ แพคเกจ TCP ไม่ได้ถูกขนส่งไปยังระบบระยะไกล
  • ความพยายามเพิ่มเติมพร้อมกับตัวเลือกที่แตกต่างกันของ socat (HowTo: http://www.cyberciti.biz/faq/linux-unix-tcp-port-forwarding/ , https://stackoverflow.com/questions/9024227/duplicate-input- unix-stream-to-multiple-tcp-clients-using-socat ) และเครื่องมือที่คล้ายกันไม่สำเร็จเนื่องจากฟังก์ชั่น TEE ที่ให้มาจะเขียนถึง FS เท่านั้น
  • แน่นอน googling และค้นหา "ปัญหา" หรือการตั้งค่านี้ก็ไม่ประสบความสำเร็จเช่นกัน

เราหมดตัวเลือกที่นี่

มีวิธีการปิดการบังคับใช้ "เซิร์ฟเวอร์ในเครือข่ายท้องถิ่น" ของฟังก์ชั่น TEE เมื่อใช้ IPTABLES หรือไม่

เป้าหมายของเราสามารถทำได้โดยการใช้ IPTABLES หรือ Routes ต่างกันหรือไม่?

คุณรู้จักเครื่องมือที่แตกต่างกันสำหรับจุดประสงค์นี้ซึ่งได้รับการทดสอบและใช้ได้กับสถานการณ์เฉพาะเหล่านี้หรือไม่?

มีแหล่งที่มาที่แตกต่างกันสำหรับ tee-proxy (ซึ่งจะตรงกับความต้องการของเราอย่างสมบูรณ์แบบ AFAIK)?


ขอบคุณล่วงหน้าสำหรับคำตอบของคุณ

----------

แก้ไข: 05.02.2014

นี่คือสคริปต์หลามซึ่งจะทำหน้าที่ตามที่เราต้องการ:

import socket  
import SimpleHTTPServer  
import SocketServer  
import sys, thread, time  

def main(config, errorlog):
    sys.stderr = file(errorlog, 'a')

    for settings in parse(config):
        thread.start_new_thread(server, settings)

    while True:
        time.sleep(60)

def parse(configline):
    settings = list()
    for line in file(configline):
        parts = line.split()
        settings.append((int(parts[0]), int(parts[1]), parts[2], int(parts[3])))
    return settings

def server(*settings):
    try:
        dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        dock_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

        dock_socket.bind(('', settings[0]))

        dock_socket.listen(5)

        while True:
            client_socket = dock_socket.accept()[0]

            client_data = client_socket.recv(1024)
            sys.stderr.write("[OK] Data received:\n %s \n" % client_data)

            print "Forward data to local port: %s" % (settings[1])
            local_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            local_socket.connect(('', settings[1]))
            local_socket.sendall(client_data)

            print "Get response from local socket"
            client_response = local_socket.recv(1024)
            local_socket.close()

            print "Send response to client"
            client_socket.sendall(client_response)
            print "Close client socket"
            client_socket.close()

            print "Forward data to remote server: %s:%s" % (settings[2],settings[3])
            remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            remote_socket.connect((settings[2], settings[3]))
            remote_socket.sendall(client_data)       

            print "Close remote sockets"
            remote_socket.close()
    except:
        print "[ERROR]: ",
        print sys.exc_info()
        raise

if __name__ == '__main__':
    main('multiforwarder.config', 'error.log')

ความคิดเห็นที่จะใช้สคริปต์นี้: สคริปต์
นี้ส่งต่อพอร์ตโลคัลที่กำหนดค่าไว้จำนวนหนึ่งไปยังโลคัลเซิร์ฟเวอร์อื่นและเซิร์ฟเวอร์ซ็อกเก็ตระยะไกล

การกำหนดค่า:
เพิ่มลงในไฟล์ config-port.config ที่มีเนื้อหาดังนี้:

ข้อความผิดพลาดจะถูกเก็บไว้ในไฟล์ 'error.log'

สคริปต์จะแยกพารามิเตอร์ของไฟล์กำหนดค่า:
แยกแต่ละบรรทัดกำหนดค่าด้วยช่องว่าง
0: พอร์ตท้องถิ่นเพื่อฟัง
1: พอร์ตท้องถิ่นเพื่อส่งต่อไปยัง
2: ที่อยู่ ip ระยะไกลของเซิร์ฟเวอร์ปลายทาง
3: พอร์ตระยะไกลของเซิร์ฟเวอร์ปลายทาง
และการตั้งค่าย้อนกลับ


HTTP ของการรับส่งข้อมูลทั้งหมดหรือไม่
longneck

ใช่ทราฟฟิกทั้งหมดคือ HTTP
Sise

1
BTW teeproxy มีให้ที่นี่: github.com/chrislusf/teeproxy
Tombart

1
ความเป็นไปได้อีกอย่าง: github.com/ebowman/splitter Scala / Netty-based
Rich K.

คำตอบ:


11

มันเป็นไปไม่ได้. TCP เป็นโปรโตคอล statefull คอมพิวเตอร์ปลายทางของผู้ใช้มีส่วนเกี่ยวข้องในทุกขั้นตอนของการเชื่อมต่อและจะไม่ตอบรับกับเซิร์ฟเวอร์สองเครื่องที่พยายามสื่อสารกับมัน สิ่งที่คุณทำได้คือรวบรวมคำขอ http ทั้งหมดบนเว็บเซิร์ฟเวอร์หรือพร็อกซีบางส่วนแล้วเล่นซ้ำ แต่นั่นจะไม่ให้และภาวะพร้อมกันหรือปริมาณการใช้งานของเซิร์ฟเวอร์ที่ใช้งานจริง


การทำซ้ำ TCP เป็นไปไม่ได้ - ฉันจะเห็นด้วย ทำซ้ำทราฟฟิกเลเยอร์ 7 ไม่ใช่ คุณสามารถจับการร้องขอจากไคลเอนต์และเล่นกลับไปยังเซิร์ฟเวอร์อื่น Simple 1 คำร้องขอต่อการเล่นเซสชัน TCP น่าจะง่าย การเชื่อมต่อแบบต่อเนื่องจะต้องใช้ความคิดบางอย่างเป็นวิธีที่คุณใช้เวลาในการร้องขอเพิ่มเติมของลูกค้า
Evan Anderson

@Kazimieras Aliulis: ไม่จำเป็นต้องสื่อสารกับเซิร์ฟเวอร์สองเครื่อง ไคลเอ็นต์กำลังสื่อสารกับเซิร์ฟเวอร์หลัก = เซิร์ฟเวอร์จริง เซิร์ฟเวอร์ที่ใช้งานอยู่กำลังประมวลผลคำขอของไคลเอ็นต์และกำลังตอบกลับไคลเอ็นต์ นอกเหนือจากการประมวลผลและตอบกลับไปยังไคลเอนต์เซิร์ฟเวอร์หลักจะทำสำเนาคำขอไปยังเซิร์ฟเวอร์ที่สอง = เซิร์ฟเวอร์ทดสอบ การตอบสนองจากเซิร์ฟเวอร์ที่สองไปยังเซิร์ฟเวอร์หลักจะถูกยกเลิก / เพิกเฉยที่เซิร์ฟเวอร์หลักและจะไม่ถูกส่งต่อไปยังลูกค้า
Sise

@Evan Anderson: การทำซ้ำในระดับ HTTP เป็นความคิดแรกของเราเช่นกัน แต่เช่น apache proxy หรือเครื่องมือหรือโมดูลที่คล้ายกันไม่อนุญาตให้ประมวลผลคำขอภายในเครื่องพร้อมกันและทำซ้ำไปยังโฮสต์ระยะไกล หากคุณมีความคิดอื่น ๆ โปรดให้คำแนะนำ! :) เราต้องการคัดลอกมากกว่าการบันทึกและเล่นซ้ำเพื่อรับผลการเปรียบเทียบทันที
Sise

1
@Sise: คุณสามารถลองเขียนพร็อกซี http ของคุณเองเพื่อส่งทราฟฟิกไปยังเซิร์ฟเวอร์สองเครื่อง มันควรจะสวยง่ายจะทำอย่างไรกับงูหลามบิดกรอบtwistedmatrix.com
Kazimieras Aliulis

@Kazimieras Aliulis: นั่นเป็นอีกทางเลือก! ฉันไม่เคยได้ยินเรื่องนี้เลย แต่การตรวจสอบออกแสดงให้เห็นว่ามันจะพอดีกับวัตถุประสงค์ของเรา เราไม่เคยพิจารณางูหลามมาก่อน แต่ขณะนี้เรากำลังดูกรอบ Twisted และความเป็นไปได้กับงูหลามทั่วไปด้วย ฉันจะรายงานกลับหากเราประสบความสำเร็จ!
Sise

20

จากสิ่งที่คุณอธิบาย GOR ดูเหมือนจะตอบสนองความต้องการของคุณ https://github.com/buger/gor/ "การรับส่งข้อมูล HTTP เล่นซ้ำแบบเรียลไทม์เล่นซ้ำทราฟฟิกจากการผลิตไปยังการจัดเตรียมและการพัฒนาสภาพแวดล้อม" ?


2
นี่คือว่าสิ่งที่ฉันกำลังมองหาขอบคุณมากคุณบันทึกฉันเขียนตรงนี้ในการไปกันเลย! :-)
chmac

nginx มีโมดูลกระจก nginx.org/en/docs/http/ngx_http_mirror_module.html
Jimmy MG Lim

7

สามารถใช้Teeproxyเพื่อทำซ้ำทราฟฟิก การใช้งานง่ายมาก:

./teeproxy -l :80 -a localhost:9000 -b localhost:9001
  • a เซิร์ฟเวอร์ที่ใช้งานจริง
  • b เซิร์ฟเวอร์ทดสอบ

เมื่อคุณวาง HAproxy (ด้วยroundrobin) ไว้ข้างหน้าเว็บเซิร์ฟเวอร์ของคุณคุณสามารถเปลี่ยนเส้นทางการเข้าชม 50% ไปยังเว็บไซต์ทดสอบได้อย่างง่ายดาย:

         /------------------> production
HAproxy /                 ^
        \                /
         \---- teeproxy -.....> test (responses ignored)

4

TCP เป็นโพรโทคอล stateful ไม่สามารถแก้ไขการคัดลอกแพ็คเก็ตที่โฮสต์อื่นได้อย่างง่ายดายเนื่องจาก @KazimierasAliulis ชี้ให้เห็น

การรับแพ็คเก็ตที่เลเยอร์ของการเลิก TCP และส่งต่อเนื่องจากกระแส TCP ใหม่นั้นสมเหตุสมผล เครื่องมือโรเนียวคุณที่เชื่อมโยงกับรูปลักษณ์ที่เหมือนทางออกที่ดีที่สุดของคุณ มันทำงานเป็นพร็อกซี TCP ช่วยให้เครื่องสถานะ TCP ทำงานได้อย่างถูกต้อง การตอบสนองจากเครื่องทดสอบของคุณจะถูกยกเลิก ฟังดูเหมือนว่าเหมาะกับใบเรียกเก็บเงินสำหรับสิ่งที่คุณต้องการอย่างแน่นอน

มันไม่ชัดเจนสำหรับฉันว่าทำไมคุณได้ตัดเครื่องมือนักลงทุนออกเป็นที่ยอมรับไม่ได้ คุณจะต้องเรียกใช้เครื่องมือหลายอินสแตนซ์เนื่องจากจะฟังเฉพาะพอร์ตเดียว แต่สันนิษฐานว่าคุณต้องการถ่ายทอดแต่ละพอร์ตฟังต่าง ๆ เหล่านั้นไปยังพอร์ตต่าง ๆ บนระบบแบ็คเอนด์ หากไม่มีคุณสามารถใช้ iptables DNAT เพื่อนำพอร์ตฟังทั้งหมดไปยังสำเนาฟังเดียวของเครื่องมือทำสำเนา

หากแอปพลิเคชันที่คุณกำลังทดสอบนั้นสกปรกง่ายฉันคาดหวังว่าคุณจะมีปัญหากับวิธีการทดสอบนี้ที่เกี่ยวข้องกับเวลาและสถานะแอปพลิเคชันภายใน สิ่งที่คุณต้องการฟังดูเป็นการหลอกลวงอย่างง่าย - ฉันคาดหวังว่าคุณจะพบเคสที่มีจำนวนมาก


ใช่คุณมีสิทธิ์อย่างสมบูรณ์เครื่องมือ agnoster โรเนียวจะตรงกับความต้องการของเรายกเว้นสถานการณ์หลายพอร์ต อีกทั้งการทิ้งการตอบสนองของเครื่องทดสอบก็เต็มไปด้วย เพื่อให้บรรลุเป้าหมายของเราในการจำลองสถานการณ์จริง / สถานการณ์จริงอย่างแม่นยำที่สุดเราไม่สามารถรวมพอร์ตทั้งหมดบนเซิร์ฟเวอร์สดเข้ากับพอร์ตเดียวหนึ่งพอร์ตบนเครื่องทดสอบ มีการใช้พอร์ตที่แตกต่างกันเพื่อแบ่งอุปกรณ์ลูกค้าออกเป็นลูกค้าที่แตกต่างกัน ดังนั้นเราต้องเปิดเซสชันของเครื่องมือทำสำเนานี้ 60-70 ครั้ง มันไม่ได้ใช้ประโยชน์ได้มากเท่าที่คุณจะจินตนาการได้
Sise

@Sise - คอมพิวเตอร์ทำสิ่งที่น่าเบื่อได้ดี ฉันคิดว่าคุณสามารถเขียนสคริปต์เพื่อแยกวิเคราะห์การกำหนดค่า Apache ของคุณและพ่นบรรทัดคำสั่งที่จำเป็นเพื่อเรียกใช้อินสแตนซ์ของเครื่องมือทำสำเนา 60 - 70 ฉันนึกภาพไม่ออกว่าเครื่องมือทำสำเนานั้นใช้ทรัพยากรอย่างมาก แต่ถึงแม้ว่าคุณสามารถเรียกใช้อินสแตนซ์เหล่านี้ได้ 60 - 70 ครั้งในเครื่องอื่นและทำการเล็ดลอดเครือข่าย อย่างน้อยสำหรับฉันดูเหมือนว่าใช้ได้จริงและเป็นวิธีที่ตรงไปตรงมาในการจัดการเรื่องนี้
Evan Anderson

1

ฉันพยายามทำสิ่งที่คล้ายกัน แต่ถ้าคุณเพียงแค่พยายามจำลองการโหลดบนเซิร์ฟเวอร์ฉันจะดูบางอย่างเช่นกรอบการทดสอบโหลด ฉันเคยใช้ locust.io ในอดีตและมันทำงานได้ดีมากในการจำลองการโหลดบนเซิร์ฟเวอร์ ซึ่งจะช่วยให้คุณสามารถจำลองลูกค้าจำนวนมากและให้คุณเล่นกับการกำหนดค่าเซิร์ฟเวอร์โดยไม่ต้องผ่านกระบวนการอันเจ็บปวดของการส่งต่อทราฟฟิกไปยังเซิร์ฟเวอร์อื่น


0

เท่าที่ "เราต้องการทำซ้ำทราฟฟิก HTTP ขาเข้าบนเซิร์ฟเวอร์ที่ใช้งานจริงไปยังเซิร์ฟเวอร์ระยะไกลหนึ่งหรือหลายเครื่องในแบบเรียลไทม์" มีวิธีหนึ่งที่ไม่ได้กล่าวถึงข้างต้นซึ่งเป็นการกำหนดค่ามิเรอร์พอร์ตบนสวิตช์ที่เชื่อมต่อ

ในกรณีของสวิตช์ Cisco Catalyst สิ่งนี้เรียกว่า SPAN (ข้อมูลเพิ่มเติมที่นี่ ) ในสภาพแวดล้อมของ Cisco คุณสามารถมีพอร์ตมิเรอร์บนสวิตช์ที่แตกต่างกันได้

แต่วัตถุประสงค์ของการนี้ก็คือการจราจรวิเคราะห์ดังนั้นมันจะเป็นทิศทางเดียว - คำหลักในข้อความที่ยกมาในวรรคหนึ่ง: ขาเข้า ฉันไม่คิดว่าพอร์ตจะอนุญาตการรับส่งคืนใด ๆ และถ้าเป็นเช่นนั้นคุณจะจัดการกับการรับส่งคืนที่ซ้ำกันได้อย่างไร นั่นอาจจะทำให้เกิดความเสียหายกับเครือข่ายของคุณ

ดังนั้น ... แค่ต้องการเพิ่มความเป็นไปได้ในรายการของคุณ แต่ด้วยข้อแม้ว่ามันจะเป็นจริงสำหรับการรับส่งข้อมูลทางเดียว บางทีคุณสามารถวางฮับบนพอร์ตมิรเรอร์นั้นและมีการตอบกลับเซิร์ฟเวอร์ซ้ำ ๆ โดยไคลเอนต์จำลองในเครื่องที่จะรับเซสชันเริ่มต้นและตอบกลับ แต่คุณจะทำซ้ำทราฟฟิกที่เข้ามาไปยังเซิร์ฟเวอร์ซ้ำ ... อาจไม่ใช่สิ่งที่คุณ ต้องการ.


เราได้คิดเกี่ยวกับเรื่องนั้นฉันได้อ่านเกี่ยวกับทางเลือกของการใช้ SPAN แต่เนื่องจากเซิร์ฟเวอร์ตั้งอยู่ในศูนย์ข้อมูลของผู้ให้บริการบุคคลที่สามเราจึงมีความเป็นไปได้ที่ จำกัด เมื่อมีการเปลี่ยนแปลงฮาร์ดแวร์ ฉันได้ขอเชื่อมต่อเซิร์ฟเวอร์ 2 เครื่องบนเครื่องที่สองโดยตรงแล้ว การดำเนินการนี้รวมกับเครือข่ายท้องถิ่นสำหรับเซิร์ฟเวอร์ 2 แห่งนี้จะอนุญาตให้ฉันใช้ IPTABLES กับ TEE แต่สำหรับทางเลือกนี้เราจะต้องเปลี่ยน IP ภายนอกของเซิร์ฟเวอร์ซึ่งเป็น NoGo เนื่องจากอุปกรณ์ไคลเอนต์ได้รับการกำหนดค่าให้เชื่อมต่อกับ IP ที่ตั้งค่าไว้
Sise

0

ฉันยังได้เขียน reverse proxy / load balancer เพื่อจุดประสงค์ที่คล้ายกันกับ Node.js (เพื่อความสนุกสนานไม่ได้มีการผลิตในเวลานี้)

https://github.com/losnir/ampel

มันมีความเห็นมากและปัจจุบันสนับสนุน:

  • GET ใช้การเลือกแบบวนรอบ (1: 1)
  • POSTใช้การแยกคำขอ ไม่มีแนวคิดของ "ต้นแบบ" และ "เงา" - แบ็กเอนด์แรกที่ตอบสนองคืออันที่จะให้บริการตามคำขอของลูกค้าและจากนั้นการตอบสนองอื่น ๆ ทั้งหมดจะถูกยกเลิก

หากใครบางคนพบว่ามีประโยชน์ฉันก็สามารถปรับปรุงให้ยืดหยุ่นได้มากกว่า


Node.js เป็นภาษาทางเลือกที่แปลกมากสำหรับแอปพลิเคชันเช่นนี้ซึ่งจะต้องมีประสิทธิภาพสูงมาก ฉันไม่แน่ใจว่าสิ่งนี้จะพร้อมสำหรับการผลิต
Michael Hampton

คุณพูดถูก นี่ไม่ได้หมายถึงการมีประสิทธิภาพสูง - เขียนได้ง่าย (สำหรับฉัน) ฉันคิดว่ามันขึ้นอยู่กับปริมาณที่ต้องการ ฉันสามารถบรรลุผลได้มากกว่า 1,000 rps เล็กน้อยบนเครื่อง low end (2 แกน)
losnir

0

บริษัท ของฉันมีความต้องการที่คล้ายกันในการโคลนแพ็คเก็ตและส่งไปยังโฮสต์อื่น (เราเรียกใช้ตัวจำลองข้อมูลการตลาดและต้องการโซลูชันชั่วคราวที่จะรับฟังข้อมูลการตลาด TCP ฟีดการนำเข้าไปแต่ละแพ็คเก็ต เซิร์ฟเวอร์)

ไบนารีนี้ทำงานได้ดีมากเป็นเวอร์ชันของ TCP Duplicator แต่เขียนใน golang แทนที่จะเป็น jscript ดังนั้นมันจึงเร็วขึ้นและทำงานได้ตามที่โฆษณาไว้

https://github.com/mkevac/goduplicator


-1

มีเครื่องมือที่สร้างขึ้นโดยผู้ชายจาก บริษัท จีนและอาจเป็นสิ่งที่คุณต้องการ: https://github.com/session-replay-tools/tcpcopy


2
สวัสดีและยินดีต้อนรับสู่ serverfault คุณช่วยตอบรายละเอียดเพิ่มเติมได้ไหม? โปรแกรมทำอะไรกันแน่ มันเขียนใน C ... ?
bgtvfr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.