25 năm Wireshark: email khởi đầu tất cả và những bài học rút ra
(blog.wireshark.org)- 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
Ý 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 đề
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
Viết thành một bài blog chắc cũng sẽ rất thú vị
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
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
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
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ó
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
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
Đâ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
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
Đầ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