Thứ Ba, 17 tháng 12, 2013

Từ khóa extern trong “C”

Trong C, khi 1 biến đi sau từ khóa “extern” có nghĩa là:
- Nó là tham chiếu của một biến,hàm cùng tên nào đó, đã được định nghĩa bên ngoài. Nó chỉ khai báo chứ không định nghĩa ( cấp phát bộ nhớ cho biến ).
- Biến được tham chiếu phải được khai báo ở cấp độ cao nhất (toàn cục), và có thể nằm trong một file khá
Trong C, một chương trình lớn có thể được chia thành các module nhỏ hơn, các module này có thể được biên dịch riêng lẻ và được liên kết lại với nhau. Điều này được thực hiện nhằm tăng tốc độ quá trình biên dịch các chương trình lớn. Tuy nhiên, khi các module được liên kết, các tập tin phải được chương trình thông báo cho biết về các biến toàn cục được yêu cầu. Một biến toàn cục chỉ có thể được khai báo một lần. Nếu hai biến toàn cục có cùng tên được khai báo trong cùng một tập tin, một thông điệp lỗi ‘duplicate variable name’ (tên biến trùng) có thể được hiển thị hoặc đơn giản trình biên dịch C chọn một biến khác. Một lỗi tương tự xảy ra nếu tất cả các biến toàn cục được yêu cầu bởi chương trình chứa trong mỗi tập tin. Mặc dù trình biên dịch không đưa ra bất kỳ một thông báo lỗi nào trong khi biên dịch, nhưng sự thật các bản sao của cùng một biến đang được tạo ra. Tại thời điểm liên kết các tập tin, bộ liên kết sẽ hiển thị một thông báo lỗi như sau ‘duplicate label’ (nhãn trùng nhau) vì nó không biết sử dụng biến nào. Lớp extern được dùng trong trường hợp này. Tất cả các biến toàn cục được khai báo trong một tập tin và các biến giống nhau được khai báo là ở ngoài trong tất cả các tập tin. Xem đoạn mã lệnh sau:
File 1:
int GlobalVariable; // implicit definition void SomeFunction(); // function prototype (declaration) int main() { GlobalVariable = 1; SomeFunction(); return 0; }
File 2:
extern int GlobalVariable; // explicit declaration void SomeFunction() {// function header (definition) ++GlobalVariable; }
File2 có các biến toàn cục giống như File1, ngoại trừ một điểm là các biến này có từ khóa extern được thêm vào sự khai báo của chúng. Từ khóa này nói với trình biên dịch là tên và kiểu của biến toàn cục được sử dụng mà không cần phải tạo lại sự lưu trữ cho chúng. Khi hai module được liên kết, các tham chiếu đến các biến ngoại được giải quyết.

Thứ Ba, 10 tháng 12, 2013

Thay đổi SID trên Windows 2008 R2

Một trong những xu hướng rất phát triển hiện nay của lĩnh vực CNTT là ảo hóa. Trong đó hướng phát triển về server ảo hóa hiện nay có thể nói là mạnh mẽ nhất, chúng ta có thể liệt kê được ngay vài sản phẩm server ảo hóa tiêu biểu như : VMWare, VirtualBox, XenServer,… Microsoft cũng tham gia vào lĩnh vực này với VirtualServer, Virtual PC và mới đây nhất là Hyper-V.
Mô hình của bạn cần nhiều Server sử dụng Windows 2008 R2, tuy nhiên để tiết kiệm thời gian và đỡ phải cài nhiều lần 1 hệ điều hành thì bạn sẽ cài một hệ điều hành Windows Server 2008 R2 chuẩn và copy file .vhd (Hyper-V) để làm thành nhiều máy ảo khác nhau. Tuy nhiên bạn sẽ gặp phải vấn đề là các máy ảo sẽ không thể join vào chung domain vì đụng SID (Security Identifier), bạn cần phải thay đổi SID cho các hệ điều hành được copy. 
Có nhiều cách để thay đổi SID cho Windows, cách tốt nhất là sử dụng phần mềm NewSID được viết bởi  Sysinternals (thuộc Microsoft Corp). Tuy nhiên phiên bản mới nhất của phần mềm này chỉ hoạt động được trên Windows 2008 về trước, NewSID không sử dụng được trong Windows Server 2008 R2. Trong bài viết này tôi giới thiệu cách thay đổi SID bằng công cụ SYSPREP có sẵn trong Windows.
Trước tiên, sử dụng bộ tools PsGetID của Sysinternals để kiểm tra SID hiện tại 
Chạy sysperp bằng cách vào Start > Run > gõ sysprep 

Để mặc định và check thêm vào Generalize. 
Chương trình sysprep tiến hành xóa các thông tin đã cài đặt. Và khi reboot lại windows sẽ nhận diện lại hardware
Tiến hành tạo thông tin mới bằng Mini Setup. Sau khi hoàn tất và logon vào thì thấy các thông tin đã được thay đổi.
Tiến hành chạy PSGetID lại thì đã được một SID mới

Thứ Tư, 4 tháng 12, 2013

Kỹ thuật Network Address Translate (NAT)



Kỹ thuật Network Address Translation (NAT)
Hầu hết những người sở hữu một kết nối Internet hiện đại ngày nay đều phải sử dụng đến kỹ thuật NAT (Network Address Translation). NAT đã là một phần không thể thiếu khi triển khai mạng IP diện rộng do không gian địa chỉ IPv4 đã bắt đầu co hẹp. Về cơ bản, NAT cho phép một (hay nhiều) địa chỉ IP nội miền được ánh xạ với một (hay nhiều) địa chỉ IP ngoại miền. Điều này cho phép sử dụng dải địa chỉ IP riêng theo chuẩn RFC 1918 trên các mạng nội bộ trong khi chỉ sử dụng một hoặc một số ít các địa chỉ IP công cộng. Bài viết sẽ trình bày những khái niệm cơ bản về NAT, các loại NAT và cách thức hoạt động của công nghệ này.

NAT

Có ba loại NAT khác nhau gồm có: NAT động, NAT tĩnh và NAT vượt tải (NAT overloaded).
Với NAT tĩnh, một địa chỉ IP nội miền chỉ định sẽ được ánh xạ sang một địa chỉ IP chỉ định khác ngoài miền, như hình dưới đây.
Trong hình trên, một PC trong mạng nội bộ cần truyền thông tới một máy khác thuộc mạng ngoài, trong trường hợp này là Internet. Nhưng địa chỉ thuộc RFC 1918 không có khả năng định tuyến trên mạng Internet công cộng do vậy không được sử dụng làm địa chỉ nguồn hay đích. Để xử lý vấn đề này, NAT có thể được cấu hình tĩnh để nối địa chỉ nội bộ 192.168.1.10 với địa chỉ ngoài 203.0.113.10. Như vậy, với mạng ngoài, lưu lượng đến sẽ là từ địa chỉ 203.0.113.10 thay vì 192.168.1.10. Trong tình huống này, NAT sẽ coi địa chỉ IP 192.168.1.10 là địa chỉ cục bộ bên trong và địa chỉ được ánh xạ 203.0.113.10 là địa chỉ chung bên trong.
Với NAT động, Địa chỉ IP nội bộ sẽ tự động được khớp với một bộ các địa chỉ IP ngoài. Quá trình ánh xạ vẫn là giữa 1 địa chỉ nội bộ với một địa chỉ ngoài nhưng được diễn ra tự động.
Ở hình trên, hai PC trong mạng nội bộ cần truyền thông tới máy ở mạng ngoài, trong trường hợp này là Internet. NAT được cấu hình động để ánh xạ các địa chỉ nội bộ là 192.168.1.25 và 192.168.1.50 với những địa chỉ IP trong tập hợp địa chỉ đã cấu hình NAT. Trong hình, máy có địa chỉ 192.168.1.50 đã được ánh xạ đến địa chỉ 203.0.113.10 và máy có địa chỉ 192.168.1.25 được ánh xạ tới địa chỉ 203.0.113.11. Điều này có nghĩa là máy có địa chỉ 192.168.1.50 sẽ được khởi tạo lưu lượng ngoài trước.
Với NAT vượt tải (còn gọi là biên dịch địa chỉ cổng PAT), ánh xạ một một như NAT động và NAT tĩnh không được sử dụng. Thay vì một địa chỉ ngoài chỉ được gán cho 1 địa chỉ IP nội bộ thì giờ đây nó có thể được gán cho tất cả các máy nội bộ dựa trên số cổng (port number). Chỉ khi số lượng cổng khả dụng sử dụng bởi địa chỉ IP ngoài bị cạn kiệt thì một địa chỉ IP ngoài thứ hai mới được dùng đến với phương pháp tương tự.
Ở hình trên, có sáu máy khác nhau đang truy cập tới các máy thuộc mạng ngoài. NAT vượt tải được cấu hình với tập hợp địa chỉ trong dải 203.0.113.10 đến 203.0.113.14. Giả sử rằng lưu lượng qua NAT router một cách tuần tự thì mỗi loại lưu lượng sẽ được ánh xạ với một địa chỉ IP ngoài (trong trường hợp này là địa chỉ IP đầu tiên tron dải-203.0.113.10) và số cổng chỉ định.
Với mỗi ví dụ, NAT router được cấu hình sử dụng cùng địa chỉ IP là 192.168.1.1 trên giao diện Fast Ethernet 0/0 được đánh dấu là giao diện NAT nội và 203.0.113.1 trên giao diện FastEthernet 0/1, được đánh dấu là giao diện NAT ngoài.

Kết luận

Có rất nhiều phương pháp phức tạp hơn để triển khai NAT nhưng mục đích bài viết là giới thiệu về NAT và cách thức hoạt động trong những ví dụ đơn giản. hi vọng rằng bài viết đã giúp các bạn hiểu rõ hơn về NAT và cách nó được sử dụng trên mạng.

Sử dụng NSLOOKUP để chuẩn đoán DNS Server


Giao thức DNS đã có đến hàng trục năm và vẫn đang thể hiện là một giao thức ổn định và tin cậy. Tuy vậy, DNS đôi khi vẫn có một số các vấn đề sự cố xảy ra. Các vấn đề này có thể bắt nguồn từ sự mất kết nối, một bản ghi DNS lỗi hoặc một số các vấn đề khác.
Khi một máy chủ DNS không thực hiện theo cách mà nó đã được mong đợi thì nhiều người dùng lệnh PING để kiểm tra. PING là một công cụ tuyệt vời cho việc chuẩn đoán lỗi DNS, tuy nhiên đôi khi lệnh PING không thể cho bạn đầy đủ thông tin về vấn đề đang mắc phải. Khi bạn cần nhiều thông tin về vấn đề DNS hơn so với những gì mà lệnh PING cung cấp thì hãy sử dụng lệnh NSLOOKUP. NSLOOKUP là một tiện ích chuẩn đoán DNS có sẵn trong Windows và UNIX. Trong bài này, chúng tôi sẽ giới thiệu cho bạn cách sử dụng tiện ích này.

Thông tin cơ bản

NSLOOKUP có một cú pháp khá phong phú và có thể là hơi lộn xộn một chút đối với những ai chưa thông thạo về nó. Chính vì vậy, bạn hãy bắt đầu với một số những kiến thức cơ bản. Mặc dù NSLOOKUP tồn tại trong cả UNIX và Windows, nhưng có một số sự khác biệt theo cách nó thực hiện trong hai hệ điều hành này. Tuy nhiên trong bài này chúng tôi sẽ chỉ giới thiệu về phiên bản Windows.
Thứ đầu tiên cần hiểu về NSLOOKUP là khi sử dụng lệnh NSLOOKUP, nó thừa nhận rằng bạn đang truy vấn một miền cục bộ trên mạng riêng của mình. Bạn có thể truy vấn một miền bên ngoài, nhưng NSLOOKUP sẽ cố gắng tìm kiếm cho miền bên trong trước tiên. Ví dụ, nếu brienposey.com là một miền bên ngoài và thực hiện NSLOOKUP đối với brienposey.com, thì NSLOOKUP sẽ trả về các thông tin như được thể hiện trong hình A.
Hình A: Kết quả khi NSLOOKUP truy vấn miền bên ngoài
Nếu nhìn vào hình trên, bạn sẽ thấy được rằng có một thông báo lỗi miền non-existent cho các địa chỉ IP 147.100.100.34 và 147.100.100.5. Có một số địa chỉ của các máy chủ DNS bên trong. Mặc dù vậy, bên dưới thông tin này là câu trả lời không chính thức. Điều này có nghĩa rằng máy chủ DNS đã cố gắng truy vấn một máy chủ DNS bên ngoài để giải quyết địa chỉ IP được kết hợp với miền brienposey.com.
Bây giờ chúng ta hãy xem xét những gì xảy ra khi bạn truy vấn một miền bên trong. Một trong những miền cục bộ trên mạng riêng trong ví dụ này là production.com. Nếu thực hiện một lệnh NSLOOKUP đối với miền này thì sẽ có các kết quả như trong hình B.
Hình B: Kết quả khi truy vấn một miền bên trong
Nếu để ý phần trên của màn hình này thì bạn sẽ thấy được rằng nó có cùng các thông báo lỗi miền non-existent như khi truy vấn một miền bên ngoài. Đầu tiên, điều này gây ra một chút hoang mang. Lý do tại sao lại có kết quả vậy sẽ được giải thích trong phần sau. Khi thực hiện việc nhập vào lệnh NSLOOKUP, bạn sẽ gặp các thông báo lỗi miền non-existent như vậy, tuy nhiên sau đó bạn sẽ bị đưa đến dấu nhắc lệnh (dấu >). Từ đây bạn có thể nhập vào các lệnh NSLOOKUP khác nữa. Khi thực hiện như vậy, bạn có thể sử dụng lệnh EXIT để trả về cửa sổ lệnh.
Một thứ khác mà bạn nên lưu ý trong hình B là phần bên dưới của đầu ra. Ở dưới tham chiếu cho production.com là một chuỗi các địa chỉ IP. Có nhiều địa chỉ IP cho tất cả các thiết bị kiểm soát miền bên trong một miền. Nếu nhiều địa chỉ IP được gán vào một máy chủ đơn lẻ thì tất cả các địa chỉ IP của máy chủ sẽ được hiển thị bởi NSLOOKUP.

Tiện ích NSLOOKUP

Giờ chúng ta sẽ đi sâu vào cách sử dụng lệnh NSLOOKUP để xem địa chỉ IP hoặc các địa chỉ có liên quan với miền. Một trong những thứ mà bạn có thể làm việc với NSLOOKUP là tra cứu một kiểu bản ghi DNS cụ thể. Ví dụ cho vấn đề này là một bản ghi MX. Trong trường hợp bạn vẫn chưa quen với tất cả các điều phức tạp của DNS thì bản ghi MX sẽ chỉ đến máy chủ mail của tổ chức. Ví dụ, có ai đó muốn gửi một email đến bạn, một trong những thứ đầu tiên mà máy chủ mail của họ phải thực hiện là giải quyết địa chỉ IP của miền của bạn. Mặc dù vậy, một giải pháp địa chỉ thông thường thường sẽ không làm việc cho mục đích này. Trong hình A, bạn đã thấy rằng, khi chạy một truy vấn DNS đối với miền brienposey.com thì miền trả về cho địa chỉ 24.235.10.4. Hãy nhớ rằng, đây là địa chỉ IP của máy chủ đang chứa website. Nếu ai đó muốn gửi một E-mail đến thì máy khách email của họ sẽ phải giải quyết địa chỉ IP của máy chủ mail miền. Đây là nơi bản ghi MX thể hiện vai trò của nó. Bản ghi MX là một bản ghi trên máy chủ DNS của miền dùng để chỉ định rõ địa chỉ IP máy chủ mail của miền.
Như những gì bạn đã thấy, bản ghi MX khá quan trọng. Giả dụ miền của bạn đang có vấn đề nhận email và bạn nghi rằng máy chủ DNS của mình có vấn đề gì đó thì \ có thể sử dụng NSLOOKUP để xác nhận xem miền thực hiện quả thực có một bản ghi MX không và bản ghi MX được trỏ đến đúng địa chỉ IP hay không.
Như những gì chúng tôi đã đề cập ở trên, bạn có thể thực hiện việc này với tiện ích NSLOOKUP. Để khắc phục sự cố một vấn đề bản ghi MX, bạn phải thực hiện một số công việc bên trong tiện ích này. Chính vì vậy bạn phải bắt đầu quá trình bằng cách nhập vào lệnh NSLOOKUP từ dấu nhắc lệnh.
Khi tiện ích NSLOOKUP được mở, bạn cần khai báo NSLOOKUP máy chủ DNS nào muốn truy vấn. Để thực hiện điều đó, bạn hãy nhập vào lệnh SERVER, sau đó là địa chỉ IP của máy chủ DNS. Bạn cũng có thể nhập vào tên miền có tư cách đầy đủ của máy chủ (thừa nhận rằng nó có thể được giải quyết) với tư cách là một sự lựa chọn địa chỉ IP của máy chủ.
Lúc này, bạn đã chỉ định máy chủ DNS cho NSLOOKUP để sử dụng, bạn có thể truy vấn các miền mà không nhận các thông báo lỗi miền non-existent như đã thấy ở trên (miễn là vẫn thực hiện bên trong tiện ích NSLOOKUP). Để thực hiện như vậy, bạn chỉ đánh vào đó tên miền mà bạn muốn truy vấn. Ví dụ, nếu nhìn vào hình C, bạn có thể thấy nơi chúng tôi đã chỉ định một máy chủ DNS riêng và sau đó truy vấn miền bên trong và bên ngoài.
Hình C: Các thông báo lỗi biến mất nếu bạn chỉ định một máy chủ DNS
Lúc này, hãy quay trở lại doanh nghiệp đê tra cứu bản ghi MX của miền. Để thực hiện như vậy, bạn cần đưa ra một lệnh yêu cầu NSLOOKUP truy vấn dựa trên các bản ghi MX. Lệnh mà bạn phải sử dụng là:
SET QUERY=MX
Việc đưa ra lệnh này tự bản thân nó sẽ không cho bạn bất kỳ thông tin gì về bản ghi MX của miền, bạn phải truy vấn miền bằng cách nhập vào tên miền. Nếu xem hình D thì bạn sẽ thấy được rằng chúng tôi đã chỉ định một truy vấn MX và sau đó đã nhập vào tên miền production.com. NSLOOKUP hiện trả về rất nhiều thông tin liên quan đến bản ghi MX của miền.
Hình D: Khi một truy vấn MX được chỉ định, bạn có thể có nhiều thông tin về bản ghi MX của miền.
Kết luận
Như những gì đã nêu ra trong bài, NSLOOKUP có thể cung cấp cho bạn một số các thông tin chuẩn đoán máy chủ DNS. Mặc dù vậy, NSLOOKUP không chỉ chế trong việc cung cấp các kiểu thông tin mà chúng tôi giới thiệu mà nó có một giao diện phong phú với một tập lớn lệnh. Bạn có thể xem danh sách các lệnh này và cú pháp của chúng bằng cách nhập vào dấu hỏi chấm tại dấu nhắc lệnh NSLOOKUP (lưu ý: bạn không thể sử dụngNSLOOKUP/? để xem tập các lệnh này).
Theo Quantrimang