1 điểm bởi GN⁺ 2023-07-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Email công bố Ethereal 0.2.0 mà Gerald Combs gửi ngày 14/7/1998 đã dẫn tới Wireshark sau 25 năm, khi một công cụ cá nhân phát triển thành một dự án mã nguồn mở trường tồn
  • Vào thời điểm đó, các trình phân tích giao thức có GUI thường là sản phẩm thương mại đắt tiền, còn lựa chọn miễn phí chỉ là các công cụ dòng lệnh như tcpdump hay snoop, nên ông đã tự tạo một trình phân tích và phát hành mã nguồn mở
  • Chỉ vài ngày sau khi công bố, các bản vá đã bắt đầu được gửi tới và cộng đồng nhà phát triển hình thành; Wireshark từ đó được dùng để cải thiện hiệu năng, độ tin cậy và bảo mật của mạng cũng như phục vụ giáo dục
  • Để vận hành lâu dài không chỉ cần người dùng, nhà giáo dục và nhà phát triển, mà còn cần hỗ trợ về pháp lý, kế toán và hạ tầng; phạm vi hỗ trợ cần thiết sẽ thay đổi theo quy mô dự án
  • Sau khi nhận được sự hỗ trợ từ CACE Technology, Riverbed và Sysdig, Wireshark gần đây đã chuyển sang Wireshark Foundation để xây dựng nền tảng phát triển độc lập

Từ lần công bố Ethereal đến cột mốc 25 năm của Wireshark

  • 25 năm trước, Gerald Combs đã gửi một email với tiêu đề ANNOUNCE: Ethereal 0.2.0
    • Ethereal là một trình phân tích mạng có thể bắt nội dung khung Ethernet và duyệt chúng một cách tương tác
    • Dữ liệu gói tin có thể được đọc từ tệp hoặc đọc theo thời gian thực từ giao diện mạng cục bộ
    • Ông cung cấp bản phân phối mã nguồn cùng thông tin bổ sung, đồng thời cho biết rất hoan nghênh ý kiến và các bản vá
  • Tên dự án ban đầu không phải là Wireshark mà chỉ được đổi thành Wireshark vào năm 2006
  • Vào thời điểm phát hành, trình phân tích giao thức vẫn còn hiếm, và các trình phân tích GUI thường là sản phẩm đắt đỏ
    • Để kiểm tra tình trạng mạng, có thể dùng các công cụ dòng lệnh miễn phí như tcpdump và snoop
    • Nếu cần một trình phân tích GUI, bạn thường phải mua sản phẩm thương mại đắt tiền
  • Do không có trình phân tích phù hợp cho công việc của mình, Gerald Combs đã tự tạo một công cụ đơn giản và phát hành nó dưới dạng mã nguồn mở

Sự tăng trưởng do cộng đồng tạo nên

  • Chỉ vài ngày sau khi Ethereal được công bố, bản vá đầu tiên đã đến, và sau đó các đóng góp tiếp tục được gửi về
  • Dự án bắt đầu như một công cụ nhỏ nhưng đã gặp được một cộng đồng nhà phát triển năng động và phát triển lớn hơn rất nhiều so với dự kiến
  • Hiện nay, Wireshark được người dùng trên toàn thế giới sử dụng để làm cho mạng nhanh hơn, ổn định hơn và an toàn hơn
  • Các nhà giáo dục dùng Wireshark để dạy cho thế hệ kỹ sư bảo mật và mạng tiếp theo cách mạng hoạt động ở tầng thấp

Những gì một dự án mã nguồn mở bền vững cần có

  • Để một dự án mã nguồn mở có thể phát triển và tồn tại lâu dài, cần đồng thời đáp ứng nhu cầu ở nhiều nhóm khác nhau
  • Hỗ trợ người dùng

    • Người dùng thực tế rất đa dạng, từ những người dùng thành thạo hằng ngày đến người mới bắt đầu
    • Người dùng đôi khi cần trợ giúp, và nhu cầu hỗ trợ của họ cũng khác nhau
  • Hỗ trợ nhà giáo dục

    • Chuyên gia và người dùng thành thạo có thể dạy người khác cách khai thác dự án hiệu quả hơn
    • Bản thân các nhà giáo dục cũng cần được hỗ trợ liên tục
  • Hỗ trợ nhà phát triển

    • Việc càng dễ đóng góp mã hoặc cải thiện dự án thì dự án và cộng đồng càng khỏe mạnh
  • Hỗ trợ pháp lý và kế toán

    • Các lĩnh vực pháp lý, quy định và tài chính như luật sở hữu trí tuệ hay quyết toán chi phí công tác đòi hỏi sự hỗ trợ từ bên ngoài
    • Chỉ GitHub hoặc GitLab thôi không thể giải quyết được những mảng này
  • Hạ tầng

    • Cần có máy chủ, container và dịch vụ để duy trì hiện diện trực tuyến và hỗ trợ cộng tác
    • Việc GitHub hay GitLab có đủ hay không phụ thuộc vào nhu cầu cụ thể của từng dự án

Cấu trúc hỗ trợ thay đổi theo quy mô dự án

  • Năm nhóm này không hoàn toàn giống mô hình tháp nhu cầu Maslow của mã nguồn mở, nhưng có cấu trúc tương tự
  • Ranh giới giữa người dùng, nhà giáo dục và nhà phát triển có thể mờ nhạt
    • Nói chung, người dùng và nhà giáo dục phụ thuộc vào thành quả do nhà phát triển tạo ra
    • Toàn bộ dự án cần một hạ tầng vững chắc để mọi người có thể cộng tác
  • Không phải mọi dự án đều cần cùng một mô hình hỗ trợ
    • Một thư viện xử lý ảnh nhỏ, đơn mục đích có thể chỉ cần hạ tầng và nhà phát triển
    • Trong trường hợp đó, cộng đồng người dùng cũng có khả năng là các nhà phát triển khác, và GitHub hoặc GitLab có thể là đủ
    • Một ứng dụng chỉnh sửa ảnh lớn với nhiều tính năng có thể cần nhu cầu trên cả năm nhóm cùng một mô hình kinh doanh để hỗ trợ chúng

Mô hình vận hành của Wireshark và việc chuyển sang Foundation

  • Wireshark là dự án gần với một ứng dụng quy mô lớn, nên cần nhiều quản lý và hỗ trợ
  • Cho tới gần đây, các nguồn lực cần thiết được đảm bảo bằng cách đề nghị nơi Gerald Combs làm việc lưu trữ dự án
  • CACE Technology, Riverbed và Sysdig đã cung cấp cho Wireshark những nguồn lực vượt ra ngoài GitHub hay GitLab
    • Một ví dụ là hội nghị chuyên về phân tích giao thức SharkFest
  • Trong vài năm gần đây, nhu cầu để dự án tự đứng vững ngày càng lớn, và với sự hỗ trợ của Sysdig, đầu năm nay dự án đã chuyển sang Wireshark Foundation
  • Việc chuyển sang Foundation trở thành nền tảng để Wireshark tiếp tục phát triển và hỗ trợ cộng đồng

Lời khuyên còn lại sau 25 năm

  • Khi gửi email đó 25 năm trước, Gerald Combs không hề nghĩ rằng sau này mình sẽ viết blog về dự án này như hôm nay
  • Kinh nghiệm hỗ trợ và vận hành Wireshark đã mang lại cho ông một sự nghiệp tuyệt vời cùng cơ hội gặp gỡ và làm việc với những con người xuất sắc
  • Nếu muốn bắt đầu một dự án mã nguồn mở, thông điệp ông để lại là đừng ngần ngại
  • Điều quan trọng là tạo điều kiện để chia sẻ những góc nhìn giá trị mà cộng đồng đang có
  • Nếu không sợ bắt đầu điều gì đó mới, bạn sẽ không thể biết sau 25 năm mình sẽ đi tới đâu

1 bình luận

 
GN⁺ 2023-07-16
Ý kiến trên Hacker News
  • Wireshark là kiểu công cụ như chiếc búa trong câu nói “cầm búa thì cái gì cũng trông như cái đinh” đối với mọi vấn đề mạng
    Dù có công cụ chuyên biệt hơn, nếu đem Wireshark ra dùng thì phần lớn vẫn có thể tìm ra nguyên nhân
    Tôi vẫn ngạc nhiên là có nhiều người tự nhận là chuyên gia mạng nhưng chưa từng dùng hoặc không hiểu Wireshark đến vậy, trong khi đây có lẽ là công cụ quan trọng nhất để hiểu chuyện gì thực sự đang diễn ra trên mạng
    Mới hôm qua tôi còn lần theo một hành vi bất thường trên hệ thống Asterisk/FreePBX sau khi nâng cấp bằng cách bắt gói; nếu không có nó thì có lẽ đã phải đoán mò vài ngày, còn ở đây chỉ cần nhìn vào những gì diễn ra trên mạng là có thể nhanh chóng khoanh vùng vấn đề

    • Nó giống như một trình gỡ lỗi cho mạng, mà đáng ngạc nhiên là cũng có nhiều lập trình viên không biết dùng debugger
    • Không biết có tài liệu nào hay để thực sự hiểu Wireshark không
      Tôi không phải chuyên gia mạng nhưng do công việc liên quan nên thỉnh thoảng có dùng, và dù cảm nhận được sức mạnh của nó, đây là công cụ khá choáng ngợp khi mới tiếp cận nếu không có một vấn đề rất nhỏ và cụ thể
      Cũng không rõ đây có phải kiểu công cụ học dần mỗi khi cần dùng hay không
    • Nếu có thời gian thì sẽ rất hay nếu bạn chia sẻ vấn đề Asterisk/FreePBX đó là gì và đã giải quyết bằng bắt gói như thế nào
      Viết thành một bài blog chắc cũng sẽ rất thú vị
    • Wireshark cũng giúp ích rất nhiều ngay cả ngoài những lĩnh vực cụ thể và hardcore như mạng
      Khoảng năm 2013 ở Amazon, tôi phải dựng một bản proof-of-concept trong vòng một tuần để thay thế một ứng dụng/dịch vụ Spring/Java cũ bằng Node.js, trong đó có xác thực giữa các dịch vụ và hệ thống nhắn tin Tibco đan xen với nhau
      Tôi không tìm được triển khai client Tibco công khai nào, còn vì nguyên tắc lãnh đạo đề cao tiết kiệm nên gần như không thể lấy được đặc tả chính thức, trong khi tôi chỉ cần vài chi tiết về cấu trúc gói của một số request
      Cuối cùng thì chắc bạn cũng đoán được công cụ nào đã cứu tôi, và ngay cả Principal Engineer lúc đó cũng ngạc nhiên là lại có một công cụ như vậy
  • Năm 1983, tôi làm ở một nhà thầu quốc phòng tại Silicon Valley, thời mà Ethernet vẫn còn dùng cáp đồng trục dày và vampire tap
    Chúng tôi làm một sản phẩm cầu nối Ethernet kết nối các mạng LAN DECnet của các trạm mặt đất DSCS (Defense Satellite Communications System) trên khắp thế giới qua các đường truyền mã hóa 9600bps, và trong một phần mã tôi đã viết một trình dump gói đặt card Ethernet ở chế độ promiscuous mode
    Khi đó chưa có trình phân tích như Wireshark, nhưng chỉ riêng việc có thể dump các gói thô ra terminal dưới dạng hex cũng đã là một lợi thế khổng lồ cho việc gỡ lỗi mạng
    Mỗi khi cài hệ thống mới, Wireshark luôn là một trong những công cụ đầu tiên tôi cài

    • Tôi tò mò Ethernet đã chuyển từ cáp dày và vampire tap sang RJ45 như thế nào
      Không biết khi đó và bây giờ nó có chính xác là cùng một giao thức không, hay gọi là giao thức có đúng không nữa
      Điều này làm tôi nghĩ mình nên đào sâu hơn về mạng
  • Tôi là người tạo ra Wireshark
    Nhìn thấy những lời tốt đẹp và ký ức của mọi người khiến buổi sáng của tôi vui hẳn lên

    • Tôi đã giải quyết rất nhiều vấn đề với Wireshark trong nhiều năm, nhưng dạo này gần như không còn dùng nữa vì nó có vẻ không theo kịp tốc độ truyền dữ liệu thường thấy trên máy chủ hiện nay
      Phân tích dường như là đơn luồng và có vẻ không có cache; trên các đường truyền 10Gbps, nó còn chật vật với những file capture chỉ “vài” GB tương ứng với vài giây dữ liệu
  • Ngay từ đầu nó đã là công cụ không thể thiếu trong công việc của tôi
    tcpdump cũng ổn, nhưng việc có thể nhấp phải vào gói rồi chọn follow TCP stream để xem toàn bộ cuộc hội thoại trong 1 giây là một tính năng thay đổi cuộc chơi
    “right click->filter out this stream” cũng vậy, và vì Ethereal/Wireshark có thể đọc file lưu từ tcpdump nên tôi có thể ssh vào máy chủ từ xa, chạy tcpdump, rồi dùng Wireshark trên máy khách để kiểm tra luồng mạng ở cả hai phía
    ISP NAT khả nghi lộ ra ngay trước mắt, còn mạng MPLS cấu hình sai thì có thể đem ra làm bằng chứng để đội định tuyến không thể chỉ nói “bên tôi trông vẫn ổn”
    Tuy vậy, tôi muốn sửa lại một điểm trong bài viết. Ethereal không phải là trình phân tích gói mạng GUI miễn phí đầu tiên; từ thời Windows NT đã có các công cụ như netmon của Microsoft

    • Công cụ đó là Network Monitor, hay còn gọi là netmon, và nội bộ còn được gọi là Bloodhound
      Nó có API được tài liệu hóa, và dù chuyện hỗ trợ khá mập mờ nhưng rất dễ tích hợp, nên trước thời Ethereal tôi từng tạo một wrapper tcpdump chạy trên nó
      Khi ngăn xếp TCP “thế hệ mới” của Longhorn/Vista xuất hiện thì API đó và netmon trở nên lỗi thời
      Sau đó Microsoft Message Analyzer ra đời, dựa trên ETW để phân tích mạng và các trace ETW khác, đồng thời cho phép viết bất kỳ trình xử lý giao thức nào bằng DSL được hỗ trợ
      Nó còn có thể parse file log và cho phép lọc/phân tích dữ liệu, nhưng có lẽ vì quá mạnh và quá hữu ích với lập trình viên Windows nên cuối cùng Microsoft đã khai tử nó
    • Nếu nó chỉ chạy trên Windows thì việc gọi là thực sự miễn phí cũng còn mơ hồ
      Suy cho cùng đó là công cụ đi kèm một hệ điều hành mà bạn đã phải trả tiền mua
  • Wireshark giống như đồng hồ vạn năng trong điện tử
    Không có nó thì thế giới vẫn vận hành, nhưng lúc có thứ gì đó hỏng mà thiếu nó thì coi như toang

    • Nhờ Wireshark và tcpdump mà tôi đã tìm ra rất nhiều vấn đề kỳ quặc trên mạng trong khuôn viên trường
  • Công cụ này, khi đó còn tên là Ethereal, cực kỳ quý giá trong công việc Senior Tech Support cho dòng sản phẩm WebLogic
    Tôi có thể yêu cầu khách hàng tự chạy nó rồi đưa ra câu trả lời kiểu như “mọi kết nối trong pool kết nối JDBC lớn đều bị một tường lửa mạng mà chính khách hàng cũng không biết tới âm thầm ngắt, vì vậy giao dịch đầu tiên buổi sáng bị trễ tới 1 giờ; toàn bộ kết nối trong pool phải timeout rồi được thiết lập lại”
    Nó cũng bắt được những vấn đề như “Internet Explorer cắt kết nối TCP của tài nguyên đã được cache, dẫn tới lỗi ở tầng mạng không chuẩn trên cài đặt WebLogic của IBM server”
    Công việc đó đã khiến tôi rụng mất nửa số tóc, nhưng nếu không có Ethereal thì chắc tôi đã mất sạch cả tóc lẫn sự tỉnh táo từ lâu

  • Tôi đã dùng Wireshark hằng ngày hơn 10 năm khi hỗ trợ các bộ cân bằng tải trong mạng của khách hàng
    pcap và core dump là loại dữ liệu thú vị nhất để xử lý, và nhờ học libpcap rồi cuối cùng còn tự làm phiên bản riêng mà tôi có thể chuyển từ hỗ trợ sản phẩm sang phát triển
    Tôi vào làm với vai trò kỹ sư hỗ trợ rồi rời đi với vai trò Principal Software Engineer, trực tiếp viết chính phần mã mà trước đây mình từng hỗ trợ, và nhờ Wireshark cùng gdb mà tôi đã có thể tự học được rất nhiều dù không học đại học

    • Tôi thích gọi đó là bài toán kiểu “không biết sai ở đâu, vậy chắc chắn là do mạng”
  • Đây là một công cụ thật sự xuất sắc và hoàn toàn miễn phí
    Tôi thường dùng nó để gỡ lỗi sự cố mạng và xem các thiết bị đang kết nối ở đâu; đúng như ai đó đã nói, nó giống đồng hồ vạn năng cho mạng
    Tôi cũng đã dùng nó để tìm hiểu cách thiết lập kết nối với điểm truy cập WiFi, và có thể nhìn thấy cả beacon packet lẫn các gói WiFi

    • Tôi đã dùng Ethereal từ những ngày rất sớm
      Nhóm tôi có một máy Sniffer PC, nhưng thường hoặc là có người đang dùng, hoặc là khả năng phân tích giao thức không đủ tốt
  • Đây là phần mềm thực sự tuyệt vời
    Khoảng 20 năm trước, tôi từng bị mắc kẹt tại chỗ ở phía khách hàng khi tìm lỗi tương thích của thiết bị mạng bên mình, và nhớ là chỉ mất 2 tuần để viết một plugin phân tích giao thức rồi nhận được hỗ trợ khá dễ dàng
    Cuối cùng hóa ra là lỗi của chúng tôi, do khi chuyển triển khai từ select() sang epoll() đã không bỏ phần áp dụng bitmask dành cho select()
    Về bản chất đó là lỗi hỏng bộ nhớ 1 bit, và hậu quả có thể xuất hiện rất lâu sau đó
    Kỳ lạ là những ký ức kiểu này lại bám rất lâu

    • Tôi ghen tị với khả năng tìm thấy niềm vui trong những việc như thế này
      Đầu sự nghiệp, tôi từng phải vật lộn suốt một tuần với một lỗi mạng cực khó chịu chỉ bằng tcpdump vì trong một cơ sở an ninh không cho phép cài wireshark
      Cuối cùng đó là sự kết hợp giữa lỗi cấu hình ARP và lỗi tệ hại nhất trong thư viện chuẩn 10 năm tuổi của GNAT (thư viện Ada), mà thật ra lỗi thư viện đó đã được sửa từ 7 năm trước rồi
      Tuần đó tồi tệ đến mức ảnh hưởng lớn đến quyết định chuyển sang một nơi tốt hơn, và để thực sự thích kiểu việc này thì cần một kiểu tính cách rất đặc biệt
  • Mọi người thường mơ về việc thay đổi thế giới, nhưng cũng có những người thật sự thay đổi thế giới