![Cách đọc dữ liệu từ ổ cắm trong Bash trên Linux Cách đọc dữ liệu từ ổ cắm trong Bash trên Linux](https://www.howtogeek.com/wp-content/uploads/2022/02/network-connections-and-binary-data-1.png?width=1198&trim=1,1&bg-color=000&pad=1,1)
Dòng lệnh Linux cho phép bạn truy xuất dữ liệu bằng cách lắng nghe trên ổ cắm hoặc kết nối với ổ cắm. Dữ liệu có thể được ghi lại trong một tệp văn bản. Chúng tôi chỉ cho bạn cách làm.
Khách hàng và Máy chủ Socket
Các ổ cắm cho phép phần mềm nối mạng giao tiếp với nhau. Lần đầu tiên chúng được triển khai trong hệ điều hành 4.2BSD Unix, được tạo ra tại Đại học California, Berkeley, vào năm 1983. Chúng nhanh chóng được System V Unix và Microsoft Windows chấp nhận.
Socket là một điểm cuối của kết nối mạng phần mềm, được trừu tượng hóa để nó có thể được coi như một trình xử lý tệp. Điều đó có nghĩa là nó phù hợp với nguyên tắc thiết kế chung của Unix và Linux là “mọi thứ đều là một tệp”. Ý của chúng tôi không phải là ổ cắm vật lý trên tường mà bạn cắm cáp mạng của mình vào.
Nếu một chương trình kết nối với một ổ cắm trên một phần mềm khác, nó được coi là khách hàng của phần mềm khác. Phần mềm cho phép phần mềm khác yêu cầu kết nối được gọi là người phục vụ. Các thuật ngữ này được sử dụng độc lập với các mục đích sử dụng khác của máy khách và máy chủ trong thế giới CNTT. Để tránh nhầm lẫn, chúng đôi khi được gọi là khách hàng ổ cắm và máy chủ ổ cắm để loại bỏ sự mơ hồ. Chúng tôi sẽ gọi chúng là máy khách và máy chủ.
Sockets được triển khai như một giao diện lập trình ứng dụng (API), cho phép các nhà phát triển phần mềm gọi chức năng socket từ bên trong mã của họ. Điều đó tốt nếu bạn là một lập trình viên, nhưng nếu bạn không phải là lập trình viên thì sao? Hoặc có lẽ là bạn, nhưng trường hợp sử dụng của bạn không đảm bảo việc viết ứng dụng? Linux cung cấp các công cụ dòng lệnh cho phép bạn sử dụng — cơ bản — máy chủ socket và ứng dụng khách socket, theo nhu cầu của bạn, để truy xuất hoặc nhận dữ liệu từ các quy trình hỗ trợ socket khác.
Các mối quan hệ không bao giờ dễ dàng
Các chương trình chúng tôi sẽ sử dụng là nc
và ncat
. Hai tiện ích này có một mối quan hệ kỳ lạ. Các nc
chương trình là sự viết lại của ncat
cũ hơn nhiều so với nc
. Nhưng mà ncat
cũng đã được viết lại và bây giờ nó cho phép chúng tôi làm một số việc nc
không thể. Và có nhiều cách triển khai ncat
bản thân nó là một phái sinh của một công cụ được gọi là netcat
. Trên hết, trên hầu hết các bản phân phối, nc
là một liên kết tượng trưng đến ncat
và không phải là một chương trình riêng biệt.
Chúng tôi đã kiểm tra các bản phân phối Arch, Manjaro, Fedora và Ubuntu gần đây. Người duy nhất yêu cầu các công cụ được cài đặt là Manjaro. Trên Manjaro, bạn cần cài đặt netcat
gói để có được nc
nhưng bạn không nhận được ncat
bạn lấy netcat
. Và trên Manjaro, nc
là một liên kết tượng trưng đến netcat
.
sudo pacman -S netcat
Điểm mấu chốt là, sử dụng Manjaro netcat
khi bạn thấy ncat
trong các ví dụ trong bài viết này.
Nghe trên Socket
Nếu phần mềm lắng nghe các kết nối socket đến, nó sẽ hoạt động như một máy chủ. Bất kỳ dữ liệu nào đến qua kết nối socket được cho là nhận bởi máy chủ. Chúng tôi có thể tái tạo hành vi này rất dễ dàng bằng cách sử dụng nc
. Mọi dữ liệu nhận được đều được hiển thị trong cửa sổ đầu cuối.
Chúng tôi cần phải nói nc
để lắng nghe các kết nối, sử dụng -l
(nghe) tùy chọn, và chúng tôi cần chỉ định cổng mà chúng tôi sẽ lắng nghe các kết nối. Bất kỳ chương trình hoặc quy trình khách nào cố gắng kết nối với phiên bản này của nc
phải sử dụng cùng một cổng. Chúng tôi nói nc
cổng nào để nghe bằng cách sử dụng -p
(cổng) tùy chọn.
Lệnh này bắt đầu nc
như một máy chủ socket, lắng nghe kết nối trên cổng 6566:
nc -l -p 6566
Trong khi nó đợi một kết nối đến, nc
không sản xuất đầu ra. Sau khi kết nối được thực hiện, mọi thông tin truy xuất được hiển thị trong cửa sổ đầu cuối. Ở đây, một kết nối đã được thực hiện bởi một chương trình khách hàng tự xác định là “khách hàng 1”.
Mọi thứ được hiển thị bởi nc
được nhận từ khách hàng. Ứng dụng khách này tình cờ gửi tên của nó và một tin nhắn được đánh số có chứa ngày và giờ.
Khi máy khách ngắt kết nối, nc
kết thúc và bạn được quay lại lời nhắc đầu cuối.
Gửi dữ liệu đến một tệp
Để thu thập dữ liệu từ máy khách trong một tệp, chúng tôi có thể gửi kết quả từ nc
đến một tệp bằng cách sử dụng chuyển hướng. Lệnh này lưu dữ liệu đã nhận vào một tệp có tên “logfile.txt”.
nc -l -p 6566 > logfile.txt
Bạn sẽ không thấy bất kỳ đầu ra nào — nó đang đi vào tệp — và nghịch lý là bạn sẽ không biết liệu kết nối đã xảy ra cho đến khi nc
chấm dứt. Việc được quay trở lại dấu nhắc lệnh cho biết một kết nối đã xảy ra và đã bị máy khách chấm dứt.
Chúng ta có thể sử dụng less
để xem lại nội dung của tệp “logfile.txt”.
less logile.txt
Sau đó, bạn có thể cuộn qua dữ liệu và tìm kiếm bằng các chức năng tích hợp ít hơn.
Gửi dữ liệu đến một tệp và cửa sổ đầu cuối
Nếu bạn muốn xem dữ liệu đang cuộn qua trong cửa sổ đầu cuối và gửi dữ liệu đến một tệp cùng lúc, hãy chuyển đầu ra từ nc
vào trong tee
.
nc -l -p 6566 | tee logfile.txt
Chấp nhận nhiều kết nối
Tất cả điều đó là tốt, nhưng nó có những hạn chế. Chúng tôi chỉ có thể chấp nhận một kết nối. Chúng tôi bị giới hạn trong việc nhận dữ liệu từ một khách hàng. Ngoài ra, khi khách hàng đó bỏ kết nối máy chủ socket của chúng tôi nc
chấm dứt.
Nếu bạn cần chấp nhận nhiều kết nối, chúng tôi cần sử dụng ncat
. chúng tôi sẽ cần phải nói ncat
để lắng nghe và sử dụng một cổng cụ thể, giống như chúng tôi đã làm với nc
. Nhưng chúng tôi cũng sẽ sử dụng -k
(giữ sống sót) tùy chọn. Điều này nói với ncat
để tiếp tục chạy và chấp nhận kết nối từ máy khách ngay cả khi kết nối hoạt động cuối cùng bị gián đoạn.
Điều này có nghĩa là ncat
sẽ chạy cho đến khi chúng tôi chọn kết thúc nó bằng “Ctrl-C.” Các kết nối mới sẽ được chấp nhận cho dù ncat
hiện có được kết nối với bất kỳ máy khách nào hay không.
ncat -k -l -p 6566
Chúng tôi có thể thấy dữ liệu từ các máy khách khác nhau xuất hiện trong đầu ra từ ncat
khi chúng kết nối.
Kết nối với máy chủ
Chúng tôi cũng có thể sử dụng nc
như một máy khách socket và kết nối với một chương trình khác đang chấp nhận kết nối và đang hoạt động như một máy chủ. Trong kịch bản này, nc
là máy khách ổ cắm. Để làm được điều này, chúng ta cần nói với nc
nơi đặt phần mềm máy chủ trên mạng.
Một cách để làm điều này là cung cấp địa chỉ IP và số cổng. Nếu máy chủ nằm trên cùng một máy tính mà chúng tôi đang chạy nc
trên, chúng ta có thể sử dụng địa chỉ IP lặp lại của 127.0.0.1. Không phải là không có cờ nào được sử dụng để chỉ ra địa chỉ máy chủ và số cổng. Chúng tôi chỉ cung cấp các giá trị thích hợp.
Để kết nối với máy chủ trên cùng một PC và sử dụng cổng 6566, chúng tôi có thể sử dụng địa chỉ IP lặp lại. Lệnh sử dụng là:
nc 127.0.0.1 6566
Dữ liệu rằng nc
truy xuất từ máy chủ cuộn qua trong cửa sổ đầu cuối.
Nếu bạn biết tên mạng của máy tính chạy phần mềm máy chủ, bạn có thể sử dụng tên mạng đó thay cho địa chỉ IP.
nc sulaco 6566
Sử dụng “Ctrl + C” để ngắt kết nối.
Nhanh chóng và dễ dàng
nc
và ncat
phù hợp với hóa đơn khi bạn không muốn viết trình xử lý ổ cắm tùy chỉnh, nhưng bạn cần thu thập dữ liệu từ một số nguồn hỗ trợ ổ cắm. Việc chuyển hướng đầu ra thành tệp cho phép bạn xem lại kết quả bằng cách sử dụng less
và phân tích cú pháp tệp bằng các tiện ích như grep
.