Lập trình viên có thể can thiệp sâu đến mức nào trong lập trình mạng

theo lý thuyết thì mạng máy tính được thiết kế theo mô hình osi 7 tầng ,

osi-encap-decap-1

theo như hình trên thì , 1 lập trình viên phần mềm có thể can thiệp và thay đổi dữ liệu ở những tầng nào ?

theo như mình đọc ở topic này https://stackoverflow.com/questions/8141118/jnetpcap-preparing-udp-tcp-ip-icmp-packet

thì 1 library của java cho phép mình tạo 1 raw packet để gửi qua mạng là jnetpcap , cho phép mình tạo 1 packet và tùy chỉnh các thông tin như tcp header ở layer4 , ip header ở layer3 , Ethernet frame ở layer2 , vậy có phải ngoại trừ layer1 là tầng vật lý ra thì lập trình viên phần mềm có thể can thiệp vào việc tạo packet ở tất cả các tầng phải không?

nếu kết luận trên là đúng thì, có phải các thư viện được tạo sẳn để lập trình viên dùng trong lập trình mạng , như http , socket đều thực chất là tự động thêm các thông tin cần thiết vào gói tin để tạo 1 gói tin hoàn chỉnh trước khi gửi đi qua mạng ? hay là việc thêm các thông tin đó được đảm nhận bởi phần cứng khác ( card mạng ), hoặc các phần mềm khác của hệ thống ?

1 câu hỏi ngoài lề nữa , làm thế nào để ép tất cả các chương trình đang hoạt động trên máy tính phải chạy qua 1 proxy hoặc 1 vpn định sẳn của mình , vd: mình có xem qua soft proxifer thấy nó tạo ra 1 proxy server và ép các process mình chọn trước khi chạy qua card mạng thì sẽ phải chạy qua cái proxy của nó , và mình cũng biết được cách của nó là nó hook dll vào process và thông ws2_32 để điều hướng theo đúng ý của nó , tuy nhiên cách này có hạn chế là nếu gặp chương trình nó chống inject dll thì ko dùng được
,còn cách hoạt động của vpn thì mình ko biết ai có thể giải thích hoặc có các tài liệu giải thích cho mình tham khảo đc không?

2 Likes

Thực tế cũng thiết kế như vậy mà bác.

Mình chơi được xuống tầng thứ 4 thì hết mana :joy:

4 Likes

Theo Sự hiểu biết của mình về lập trình mạng như sau:

  1. Mô hình osi 7 lớp giờ rút gọn rồi, người ta sẽ nói về mô hình 4 lớp kể cả thực tế cũng vậy.
  2. Về mặt lập trình có thể can thiệp được đến gần như hết các tầng, nhưng không thay đổi hay tác động được vào packet trong quá trình transfer bản tin được bắt dưới tầng mạng giống kiểu JPCAP hay wireshark hay dùng.
  3. Về mặt bản chất mình có thể hiểu VPN là mạng ảo giống kiểu proxy server, VPN client đơn giản chỉ như kiểu kết nối và tác động đến window forward tất cả các bản tin qua VPN trc khi tìm đến các địa chỉ khác. hoàn toàn có thể dùng ngôn ngữ lập trình để tạo ra các Proxy server dưới dạng kết hợp với sự hiểu biết về hệ điều hành để can thiệp những tác động về mặt câu lệnh hay các file dll mà OS cho phép tác động để thay đổi đường mạng và điều khiển trên card mạng.
4 Likes
  1. về định nghĩa thì mình biết rồi , cái mình muốn tìm hiểu là thật sự bắt tay vào viết 1 proxy server thật sự nó sẽ thế nào , cần những logic gì
    vd: client tạo 1 request ( có chứa thông tin về địa chỉ đích thật sự) ta bắt được gói tin đấy , rồi làm sao để send gói tin đó vào proxy server , rồi từ proxy server mới send đến đích thật , có example hay source nào đó để run và xem cách nó thực sự hoạt động ấy bạn , mình thích kiểu học đi đôi với hành cứ example đi liền với lý thuyết luôn ấy

Lâu lắm rồi mới có 1 câu hỏi chất lượng như vậy xuất hiện tại diễn đàn. Hoan nghênh và nhiệt liệt cảm ơn bạn.
Mình sẽ góp vài ý kiến theo hiểu biết hạn hẹp của mình về lĩnh vực này.

Mạng máy tính hiện tại khá phức tạp và nhìn chung là có 4.5 lớp (lai giữa 4 và 5). Mô hình OSI chỉ là 1 mô hình lý thuyết được đặt ra để dễ phân loại và phục vụ cho học thuật nhiều hơn là thực tế.

Về mặt lý thuyết thì lập trình viên có thể can thiệp được tất cả các tầng, kể cả tầng vật lý nếu có thiết bị phù hợp. Gần đây có 1 vụ liên quan tới việc hacker xâm nhập chip wifi của Broadcom và tấn công vào hệ thống.
Cách đây vài năm, hacker cũng đã thực hiện tấn công replay RF attack, để đánh cắp một chiếc xe hơi. Có thể bạn nghĩ nó đơn giản như replay một cái chìa khóa remote mở cửa cuốn ở Việt Nam, nhưng thực sự câu chuyện authentication cho chìa khóa xe hơi ở đằng sau rất phức tạp.
Nhìn chung, việc can thiệp tầng càng thấp thì càng khó và đòi hỏi kiến thức và kỹ năng càng nhiều và bị giới hạn về can thiệp phần cứng của các thiết bị mạng, kernel của thiết bị mà bạn đang sử dụng. Nên muốn can thiệp ở mức thấp hơn thì bạn phải tự build ra hệ thống đó nhiều hơn là sử dụng @library (:stuck_out_tongue:) có sẵn.

Việc bổ sung thông tin gì vào gói tin phụ thuộc vào riêng biệt mỗi thiết bị mạng, và tất nhiên theo lý thuyết là bản thân thiết bị của bạn. Đơn giản là nếu bạn control được tới mức điện áp cao và thấp thì bạn muốn thêm cái gì chả được? Cụ thể ở đây ví dụ như switch có thể thêm thông tin vào layer 2 và 3.

5 Likes

Về mặt detail muốn biết cần làm gì để tạo ra đc 1 proxcy server thì theo mình nên có ng khai thác opensource đưa ra 1 list như bài học sẽ hay. Hy vọng cod ng đưa topic đó lên để mọi ng cùng đc biết. Còn về mặt logic tổng quan theo hiểu biết của mình thì cần những hiêủ biết sau:

  1. Kiến thức về socket để hiểu về socket server và giao thức sẽ sử dụng khi tạo proxcy server.
    2 kiến thức về wireshark java có thể dùng jpcap, c++ dùng winpcap c# dùng socket thuần để bắt đc gói tin card mạng in ra đáp ứng debug qua bản tin.
    3 cần hiểu biết về các lệnh liên quan đến os vì os có lệnh cho phép mình tác động đến firewall như chặn port mở port forward port điển hình linux có lênh iptable forward sẽ biến linux thành gateway trung gian forward các bảntin đến nó.

Hy vọng có ích

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?