(NB) Giáo trình Lập trình mạng với các mục tiêu chính là Trình bày nguyên lý lập trình mạng, cơ chế hoạt động của chương trình thông qua các Giao thức, hàm truy xuất. Mô tả mô hình mạng, Giao thức truy cập thông qua các chương trình được cài đặt. Sử dụng thành thạo các công cụ lập trình Windows hoặc Java để lập trình. Xây dựng được các ứng dụng mạng: dịch vụ, hệ thống, dữ liệu để bảo vệ hệ thống, giám sát hệ thống, truy vấn dữ liệu….
TRƯỜNG CAO ĐẲNG NGHỀ CÔNG NGHIỆP HÀ NỘI Tác giả Bùi Quang Ngọc Lê Văn Úy GIÁO TRÌNH LẬP TRÌNH MẠNG (Lưu hành nội bộ) Hà Nội năm 2011 Tuyên bố quyền Giáo trình sử dụng làm tài liệu giảng dạy nội trường cao đẳng nghề Công nghiệp Hà Nội Trường Cao đẳng nghề Công nghiệp Hà Nội không sử dụng không cho phép cá nhân hay tổ chức sử dụng giáo trình với mục đích kinh doanh Mọi trích dẫn, sử dụng giáo trình với mục đích khác hay nơi khác phải đồng ý văn trường Cao đẳng nghề Công nghiệp Hà Nội MỤC LỤC TUYÊN BỐ BẢN QUYỀN Error! Bookmark not defined LỜI GIỚI THIỆU Error! Bookmark not defined BÀI : TỔNG QUAN VỀ LẬP TRÌNH MẠNG Lịch sử phát triển Lập trình mạng Lý lập trình mạng tảng NET Phạm vi Địa IP Network stack 10 Port 10 Internet standards .11 NET framework 12 8.1 Thành phần NET Framework .12 8.2 Những đặc điểm NET Framework 13 Visual Studio NET 15 9.1 Phiên Visual Studio NET 2008 15 9.2 Làm việc với Visual Studio NET 2008 17 9.3 Các loại ứng dụng dùng C# 18 9.4 Cấu trúc chương trình C# 20 9.5 Cấu trúc thư mục ứng dụng 21 BÀI : VẤN ĐỀ I/O TRONG NET 23 Giới thiệu không gian tên IO 23 Streams 23 2.1 Mã hóa liệu 23 2.2 Sử dụng StreamReader để đọc tập tin Text 26 BÀI : LÀM VIỆC VỚI SOCKETS 37 Giới thiệu socket lập trình mạng 37 1.1 Định nghĩa 37 1.2 Số hiệu cổng (Port Number) socket .37 1.3 Các chế độ giao tiếp 39 Tạo ứng dụng đơn giản “hello world” 40 2.1 Viết dạng đơn giản UDP client 40 2.2 Viết dạng đơn giản UDP server 40 Dùng giao thức TCP/IP để chuyển files .42 Gỡ rối lập trình mạng .44 Mức Socket NET .45 BÀI : KẾT NỐI VỚI WEB SERVER 56 Giới thiệu HTTP 56 HTTP .57 2.1 Yêu cầu HTTP 57 2.2 Đáp ứng HTTP 59 2.3 Kiểu MIME 60 2.4 Không gian tên System.Web .60 2.5 Chuyển liệu (Posting data) .63 2.6 Chú ý làm việc với cookies 63 2.7 A WYSIWYG editor 64 Máy chủ Web (Web servers) .66 3.1 Thực thi máy chủ Web 66 Làm việc với lớp System.Net.HttpWebListener 68 Trình duyệt Web di động (Mobile Web browsers) .69 BÀI : TRUYỀN THÔNG VỚI EMAIL SERVERS .70 Phương thức gởi nhận Email 70 SMTP 72 POP3 76 Làm việc với lớp System.Web.Mail 77 Xây dựng ứng dụng Mail 78 BÀI : TRUYỀN THÔNG VỚI FILE SERVER 81 Tổng quan File server truyền File .81 1.1 Chia sẻ File Microsoft 81 1.2 Chia sẻ File Netware .82 Truyền File 82 2.1.Cách thức dùng cổng FTP 82 2.2 Bắt tay truyền File .83 2.3 Truyền thông qua thư mục 84 2.4.Tham khảo lệnh FTP 86 2.5 Công cụ FTP .94 2.6 Công cụ FTP với điều khiển Internet 97 2.7 Một vài công cụ thực tế FTP 98 2.8 FTP hỗ trợ NET 2.0 .102 BÀI : AN NINH MẠNG (FIREWALLS, PROXY SERVERS, AND ROUTERS) 104 Tổng quan bảo vệ mạng 104 1.1 Giới thiệu An ninh mạng 104 1.2 Xây dựng mạng lưới an ninh từ đầu 104 Tunneling mạng doanh nghiệp 107 Tránh cạm bẫy mạng 108 MƠ ĐUN LẬP TRÌNH MẠNG Mã mơ đun : MĐ35 Vị trí, tính chất, ý nghĩa vai trị Mơđun Vị trí: Mơ đun bố trí vào năm thứ học kì II khóa học Tính chất: Mơ đun chun mơn nghề tự chọn Ý nghĩa : Đây mô đun tự chọn chuyên môn nghề, cung cấp cho sinh viên kỹ lập trình mạng, xây dựng sản phẩm phần mềm để phục vụ công việc quản trị mạng Mục tiêu mơđun Trình bày nguyên lý lập trình mạng, chế hoạt động chương trình thơng qua Giao thức, hàm truy xuất Mơ tả mơ hình mạng, Giao thức truy cập thơng qua chương trình cài đặt Sử dụng thành thạo cơng cụ lập trình Windows Java để lập trình Xây dựng ứng dụng mạng : dịch vụ, hệ thống, liệu để bảo vệ hệ thống, giám sát hệ thống, truy vấn liệu… Bố trí làm việc khoa học đảm bảo an tồn cho người phương tiện học tập Nội dung môn học Số TT Tên mơ đun Tổng quan lập trình mạng Vấn đề I/O NET Làm việc với Sockets Truyền thông với Web Servers Truyền thông với Mail Servers Truyền thông với File server Bảo mật mạng :Firewalls, Servers, and Routers Cộng Tổng số 10 10 17 13 16 13 Proxy Thời gian Lý Thực Kiểm thuyết hành Tra* 5 5 12 10 11 90 30 56 BÀI : TỔNG QUAN VỀ LẬP TRÌNH MẠNG Mã : MĐ35.01 Mục tiêu : - Trình bày vấn đề điều hành mạng lập trình mạng: Vấn đề truyền thơng tin, địa IP, Giao thức, tầng liên lạc tính phân cấp giao thức, thơng điệp - Trình bày thành phần mơi trường NET Framwork - Thực câu lệnh Visual Studio NET - Thực thao tác an tồn với máy tính Lịch sử phát triển Lập trình mạng Cuốn sách giúp bạn phát triển ứng dụng mạng với NET, cách sử dụng C (phát âm C-sharp) ngôn ngữ lập trình VB.NET Nó chia thành ba phần riêng biệt: vấn đề kết nối mạng, thiết kế ứng dụng phân tán, chủ đề mạng chuyên ngành Sáu chương sách bao gồm công nghệ Internet thành lập, chẳng hạn email World Wide Web Tận dụng công nghệ thành lập cho phép truy cập cơng cộng nói chung lớn cho dịch vụ phần mềm bạn hầu hết người dùng có trình duyệt web ứng dụng email máy tính họ Năm chương thảo luận thiết kế ứng dụng mạng Điều bao gồm bảo mật ứng dụng, hiệu suất, khả mở rộng Chứa chương thực tế, thực hành lời khuyên để giúp nâng cao chất lượng tổng thể phần mềm bạn Với bảo mật khó khăn hơn, ứng dụng bạn nhạy cảm với hành vi trộm cắp sở hữu trí tuệ thơng tin đặc quyền Cải tiến hiệu suất khả mở rộng mô tả phần đảm bảo ứng dụng bạn đáp ứng tải cực đoan Các mạng phần chuyên đề cung cấp vơ số thơng tin hai thích hợp công nghệ Internet tiên tiến Chúng bao gồm chương điện thoại, chụp gói, hàng đợi tin nhắn, IPv6, dịch vụ Microsoft lĩnh vực phát triển ứng dụng phân tán: dịch vụ Web truy cập từ xa Lý lập trình mạng tảng Microsoft NET Một định kỹ thuật thực dự án thực ngôn ngữ để sử dụng NET tảng có khả để phát triển giải pháp, cung cấp hỗ trợ đáng kể cho lập trình mạng Trong thực tế, Microsoft NET có hỗ trợ nội cho mạng so với tảng khác phát triển Microsoft Cuốn sách giả định bạn định để phát triển với Microsoft NET, ngôn ngữ bên ngồi tảng NET khơng thảo luận chi tiết tuyệt vời, ngoại trừ cho mục đích so sánh Điều khơng phải để nói Microsoft NET được-tất cuối tất ứng dụng lập trình mạng Nếu ứng dụng bạn chạy sở hạ tầng UNIX giao tiếp thông qua Java gọi phương thức từ xa (RMI), sau Microsoft NET khơng phải đường để Trong hầu hết trường hợp, nhiên, bạn tìm thấy điều Microsoft.NET nhiều khả xử lý điều bạn ném vào Phạm vi Một chương trình mạng ứng dụng mà sử dụng mạng máy tính để chuyển thơng tin đến từ ứng dụng khác Ví dụ từ trình duyệt web phổ biến Internet Explorer, chương trình mà bạn sử dụng để nhận email bạn, phần mềm điều khiển tàu vũ trụ NASA Tất thành phần chia sẻ phần mềm khả giao tiếp với máy tính khác, làm vậy, trở nên hữu ích cho người sử dụng cuối Trong trường hợp trình duyệt, tất trang web bạn truy cập tập tin lưu trữ máy tính nơi khác Internet Với chương trình email bạn, bạn giao tiếp với máy tính nhà cung cấp dịch vụ Internet (ISP) bạn trao đổi email công ty tổ chức email bạn cho bạn Cuốn sách chủ yếu quan tâm đến việc tạo chương trình mạng Mặc dù khả trang web chương trình mạng cách nhanh chóng hội tụ, quan trọng để hiểu đối số hệ thống Một dịch vụ truy cập thông qua trang web truy cập để người sử dụng nhiều tảng khác nhau, toàn kiến trúc mạng sẵn sàng xây dựng cho bạn, nhiên, có điểm mà tính đơn giản khơng khả thi để thực cách sử dụng trang web mà bạn có chuyển sang mạng ứng dụng Người dùng thường tin tưởng ứng dụng mạng, đó, chương trình có quyền kiểm sốt lớn máy tính mà họ chạy trang web máy tính xem Điều làm cho cho ứng dụng mạng để quản lý tập tin máy tính địa phương, trang web, cho tất mục đích thực tế, khơng thể làm điều Quan trọng hơn, từ góc độ kết nối mạng, ứng dụng có quyền kiểm sốt lớn làm giao tiếp với máy tính khác Internet Có ngoại lệ cho quy tắc này, thực thi nội dung (chẳng hạn điều khiển ActiveX) bao gồm trang Trong trường hợp này, trang khả tất thứ làm chương trình mạng, hầu hết trình duyệt phần mềm chống virus cảnh báo chống lại phủ nhận nội dung thực thi Vì vậy, kịch thường chấp nhận khơng khả thi lịng tin cơng cộng Để đưa ví dụ đơn giản, trang web khơng làm cho máy tính xem mở kết nối mạng liên tục cho máy tính khác (ngoại trừ máy tính mà từ trang web phục vụ) Điều áp dụng trang web có chứa nội dung nhúng applet Java phim Flash Có ngoại lệ cho quy tắc này, thực thi nội dung (chẳng hạn điều khiển ActiveX) bao gồm trang Trong trường hợp này, trang khả tất thứ làm chương trình mạng, hầu hết trình duyệt phần mềm chống virus cảnh báo chống lại phủ nhận nội dung thực thi Vì vậy, kịch thường chấp nhận khơng khả thi lịng tin cơng cộng Địa IP Mỗi máy tính kết nối trực tiếp với Internet phải có địa toàn cầu Một địa IP số có bốn byte, mà thường viết bốn thập phân, số thời gian cách nhau, chẳng hạn 192.168.0.1 Máy tính kết nối gián tiếp với Internet, chẳng hạn thông qua mạng công ty họ, có địa IP, chúng khơng cần phải tồn cầu nhất, có mạng Để tìm địa IP máy tính bạn, mở cửa sổ giao diện điều khiển hệ điều hành DOS loại ipconfig (Windows NT, 2000, and XP) winipcfg (Windows 95, 98, ME) Trong hình, 1.1 máy tính có hai địa IP: 192.618.0.1 81.98.59.133 Điều khơng bình thường máy tính đặc biệt có chứa hai card mạng kết nối với hai mạng khác Chỉ có địa IP truy cập công khai Nếu bạn nhận địa IP 127.0.0.1, máy tính bạn khơng kết nối với mạng Địa IP luôn đề cập đến máy tính địa phương sử dụng ví dụ sau Trong cách mà bạn nói cho dù số điện thoại địa phương quốc tế cách nhìn vào tiền tố, bạn cho biết liệu máy tính với địa IP mạng khu vực địa phương nơi khác Internet cách nhìn chặt chẽ địa IP Trong trường hợp địa IP, họ luôn độ dài, tiền tố định (192,168 phổ biến nhất) máy tính mạng lưới khu vực địa phương, mạng nội bộ, khơng thể truy cập vào giới bên ngồi Nếu bạn chia sẻ kết nối Internet bạn với máy tính khác mạng bạn, bạn có địa IP riêng Đây công nhận phạm vi địa IP liệt kê Bảng 1.1 Dãy địa Số lượng địa 10.0.0.0 đến 10.255.255.255 Tên 16 tỉ máy tính (lớp A) 172.16.0.0 đến 172.31.255.255 900.000 máy tính (lớp B) 192.168.0.0 đến 192.168.255.255 65.000 máy tính (lớp C) Bảng 1.1 : Bảng liệt kê địa máy tính Cùng địa IP riêng tồn hai máy tính mạng khu vực khác cục (LAN) Điều không gây vấn đề khơng phải máy tính trực tiếp liên lạc với Trong đó, máy tính giải tư nhân bắt đầu u cầu thơng tin từ máy tính nước ngồi, khơng có máy tính nước ngồi bắt đầu u cầu thơng tin từ máy tính cá nhân giải Các trường hợp ngoại lệ cho quy tắc nơi network address translation (NAT) cổng chuyển tiếp thiết lập router nằm thượng nguồn máy tính tư nhân giải Đây nơi mà yêu cầu từ máy móc nước dành cho địa IP router chuyển tiếp đến computer định phía sau router Câu trả lời từ máy tính chuyển tiếp từ phía sau router máy nước ngồi bắt đầu u cầu Những lợi ích kiến trúc an ninh khả cân tải, mô tả chi tiết chương sau Tất máy tính có địa IP riêng phải kết nối với máy tính router mạng với địa IP công cộng truy cập Internet Để đảm bảo khơng có hai máy tính Internet có địa IP, có quan quản lý trung ương gọi Internet Assigned Numbers Authority (IANA), gần Tổng công ty Internet cho tên miền số (ICANN ) Cơ thể hoạt động thông qua nhà cung cấp dịch vụ Internet để gán địa IP công cộng cho tổ chức cá nhân Mặc dù phân bổ địa IP thời điểm, nhiều phổ biến phân bổ địa IP khối tiếp giáp Tiếp giáp khối có ba lớp học: A, B, C Class A địa khối địa IP với byte Class A 16 triệu địa IP kích thước Địa lớp B khối địa IP với byte thứ hai Lớp B giữ 65.024 địa IP công cộng 216 phạm vi byte đầy đủ khơng có byte cuối địa IP 255 chúng dành riêng để sử dụng tương lai Địa lớp C khối địa IP với byte đầu tiên, thứ hai, thứ ba Class C nắm giữ 254 địa công cộng, địa lớp C thường xuyên giao cho cơng ty Một máy tính khơng phải lúc có địa IP Nó có địa IP từ máy chủ ISP động điều khiển máy chủ bạn (DHCP) giao thức Điều có nghĩa địa IP bạn thay đổi bạn trực tuyến Một địa IP gọi địa IP động Nếu bạn mạng nội bộ, bạn kiểm tra xem địa IP bạn chịu trách nhiệm thay đổi cách kiểm tra "có địa IP tự động" nút radio thuộc tính TCP / IP, theo mạng bảng điều khiển Mục đích DHCP có số lượng hạn chế IP địa có sẵn cho ISP, phân bổ th bao với IP địa từ hồ bơi sở đến trước phục vụ trước Địa IP số 32-bit, với giá trị tối đa khoảng tỷ đồng, số lượng máy tính giới nhanh chóng tiếp cận số IPv6 giải pháp cho vấn đề thảo luận chương sau Có định danh xây dựng vào tất card mạng mà thực thay đổi Điều gọi phần cứng, truy cập địa kiểm sốt phương tiện truyền thơng (MAC) Một địa mẫu MAC 0002-E3-15-59-6C sử dụng mạng nội để xác định máy tính họ đăng nhập vào mạng Một hệ thống gọi giao thức phân giải địa (ARP) sử dụng để kết hợp địa MAC với địa IP Network stack Các tín hiệu kỹ thuật số mà dò đường máy tính Internet vơ phức tạp Nếu khơng có khái niệm đóng gói, lập trình nhanh chóng trở thành sa lầy với chi tiết không đáng kể Kỹ thuật sử dụng sống hàng ngày, nơi bạn yêu cầu tài xế taxi để đưa bạn đến trung tâm thành phố Đó trách nhiệm lái xe taxi để tìm đường nhanh để vận hành xe Ở mức thấp lần nữa, xe nhà sản xuất chịu trách nhiệm đảm bảo xăng có mặt động piston máy gia tốc chán nản Đóng gói chi tiết phức tạp nhiệm vụ ẩn,và lập trình viên cần tập trung vào xảy mức độ cao Các kết nối hệ thống mở (OSI) mơ hình mạng ngăn xếp có bảy lớp đóng gói, thể Bảng 1.2 Trong lập trình đại, nhiên, mạng ngăn xếp trông giống Bảng 1.3 lớp quan trọng cho lập trình viên lớp cao điều đủ khả dễ dàng sử dụng phù hợp với hầu hết ứng dụng Khi bạn xuống ngăn xếp, thực trở nên khó khăn hơn, linh hoạt Bảng 1.2 : lớp truyền thống Lớp Tên lớp Giao thức Level Application layer FTP Level Presentation layer XNS Level Session layer RPC Level Transport layer TCP Level Network layer IP Level Data-Link layer Ethernet Frames Level Physical layer Voltages Bảng 1.3: Các lớp đại Lớp Tên lớp Giao thức Level Structured Information layer SOAP Level Messaging layer HTTP Level Stream layer TCP Level Packet layer IP Cuốn sách bao gồm lớp ứng dụng chủ yếu, đảm bảo đưa cho tất lớp khác nhau, không bao gồm lớp vật lý, mà áp dụng cho kỹ sư điện tử Trong lập trình mạng, bạn thường khơng cần phải quan tâm với cách thức thơng tin truyền hai máy tính, với bạn muốn gửi Chi tiết tốt đặt cấp thấp kiểm soát hoạt động máy tính hệ thống Port Nếu bạn muốn trình duyệt Web nhận email lúc, máy tính bạn cần phải định bit lưu lượng truy cập mạng email trang web Để 2.6 Công cụ FTP với điều khiển Internet Thực thi đầy đủ FTP cam kết Nó đáng giá để xem xét kiểm soát Microsoft Chuyển Internet bạn cần phải thực nhiệm vụ Nó COM di sản kiểm sốt (và mang nhiều chi phí cho ứng dụng NET.) Bản địa Thành phần NET có sẵn thị trường từ Dart cơng trình * IP Có nói rằng, nhiều ứng dụng, bạn không cần phải hát tất cả, thực FTP để có cơng việc bạn thực Nếu bạn viết tính để ứng dụng để lên kế hoạch thực tải lên tập tin đến máy chủ, bạn không muốn gây nhầm lẫn cho người sử dụng với chi tiết cấu trúc thư mục máy tính từ xa Tất bạn cần vài dòng mã để chuyển tập tin đến vị trí xác định trước Tạo dự án ứng dụng Windows Visual Studio NET bình thường, rút hai hộp văn bản, tên tbServer tbFile khác Thêm hai nút, btnBrowse btnUpload Bạn yêu cầu kiểm soát Dialog Open File tên OpenFileDialog private void btnBrowse_Click(object sender, EventArgs e) { openfileDialog.ShowDialog(); tbFile.Text = openfileDialog.FileName; } private void btnUpload_Click(object sender, EventArgs e) { if ((tbFile.Text.Trim() == "")) { MessageBox.Show("Please choose a file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } FileInfo thisFile = new FileInfo(tbFile.Text); Type ITC; object[] parameter = new object[2]; object ITCObject; ITC = Type.GetTypeFromProgID("InetCtls.Inet.1"); ITCObject = Activator.CreateInstance(ITC); parameter[0] = (string)tbServer.Text; parameter[1] = (string)"PUT " + thisFile.FullName + " /" + thisFile.Name; ITC.InvokeMember("execute", BindingFlags.InvokeMethod, null, ITCObject, parameter); } 2.7 Một vài công cụ thực tế FTP ITC có vài hạn chế, có vài lỗi tiếng, xa việc thực hiệu suất cao Hơn nữa, khơng có nguồn gốc NET, nhiều nhà phần mềm yêu cầu NET dự án mã quản lý 100% Bằng cách làm theo mã trang tiếp theo, bạn có đầy đủ FTP client, với khả để duyệt hệ thống tập tin từ xa, tải lên, tải Bắt đầu dự án Visual Studio NET thêm hai hình thức, frmLogon frmMain Về hình thức Logon, rút bốn hộp văn bản: tbServer, tbUsername, tbPassword, tbStatus Sau nên thiết lập với = multiline thật màu xám ngồi cách thích hợp Một nút, btnLogon, nên thêm vào Trên hình thức chính, vẽ hai danh sách hộp: LbFiles lbFolders Thêm hộp văn tên tbStatus phong cách tương tự hình thức Logon Thêm ba nút: btnUpload, btnDownload, btnRoot Ngoài thêm hộp thoại File Open kiểm soát tên OpenFileDialog Save File Dialog kiểm soát đặt tên SaveFileDialog Trong Form chính, thêm vài biến tồn cục: private const string STR_Constant = "\r\n"; public frmLogon LogonForm = new frmLogon(); public NetworkStream NetStrm; public string RemotePath = ""; public string server = ""; public string sendFTPcmd(string cmd) { byte[] szData; string returnedData = ""; StreamReader RdStrm = new StreamReader(NetStrm); szData = Encoding.ASCII.GetBytes(cmd.ToCharArray()); NetStrm.Write(szData, 0, szData.Length); tbStatus.Text += "\r\nSent:" + cmd; returnedData = RdStrm.ReadLine(); tbStatus.Text += "\r\nRcvd:" + returnedData; return returnedData; } public void getRemoteFolders() { string[] filesAndFolders; string fileOrFolder; string folderList = ""; int lastSpace = 0; folderList = Encoding.ASCII.GetString(sendPassiveFTPcmd("LIST\r\n")); lbFiles.Items.Clear(); lbFolders.Items.Clear(); filesAndFolders = folderList.Split("\n".ToCharArray()); for (int i = 0; i < filesAndFolders.GetUpperBound(0); i++) { if (filesAndFolders[i].StartsWith("-") || filesAndFolders[i].StartsWith("d")) { lastSpace = 59; // UNIX format } else { lastSpace = 39; // DOS format } fileOrFolder = filesAndFolders[i].Substring(lastSpace); if (fileOrFolder.IndexOf(".") != -1) { lbFiles.Items.Add(fileOrFolder.Trim()); } else { lbFolders.Items.Add(fileOrFolder.Trim()); } } } public byte[] sendPassiveFTPcmd(string cmd) { byte[] szData; System.Collections.ArrayList al = new ArrayList(); byte[] RecvBytes = new byte[Byte.MaxValue]; Int32 bytes; Int32 totalLength = 0; szData = System.Text.Encoding.ASCII.GetBytes(cmd.ToCharArray()); NetworkStream passiveConnection; passiveConnection = createPassiveConnection(); tbStatus.Text += "\r\nSent:" + cmd; StreamReader commandStream = new StreamReader(NetStrm); NetStrm.Write(szData, 0, szData.Length); while (true) { bytes = passiveConnection.Read(RecvBytes, 0, RecvBytes.Length); if (bytes