Câu trả lời:
Nếu bạn không thích thực hiện Lấy dấu vân tay hệ điều hành vì một số lý do, bạn có thể thực hiện quét cổng được nhắm mục tiêu hơn:
nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
Điều đó sẽ quét các cổng phổ biến cho máy in và hệ thống in.
Đầu ra là XML.
Câu trả lời này trả lời câu hỏi đầu tiên của bạn trực tiếp. Đối với câu hỏi thứ hai, hiểu lệnh sẽ cho phép bạn cũng đặt địa chỉ IP của máy in vào một tệp. Vì vậy, ở đây chúng tôi đi:
nmap -p 515,631,9100 -oG - 10.81.129.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs --replace=$ipaddress snmpget -v 1 -O v -c public $ipaddress system.sysDescr.0 | sed 's/STRING:\s//'
nmap - Quét mạng. ( Nmap.org )
-p 515,631,9100
Quét cổng TCP 515, 631 và 9100.-oG -
Sử dụng định dạng đầu ra có thể grep.-sU -p 161
Quét cổng UDP 161.gawk hoặc awk - Xử lý dữ liệu văn bản theo định hướng cột. Theo mặc định, khoảng trắng phân tách dòng thành các cột. ( Wikipedia )
gawk '/regexp/'
Sử dụng biểu thức điều chỉnh với gawk để lọc ra các dòng khớp với biểu thức điều tiết này.gawk '{<code>}'
Sử dụng ngôn ngữ đầu vào giống như awk C để thao tác đầu ra.gawk '{/open/print $2}'
Tìm kiếm các dòng phù hợp với mở open và in cột thứ hai.xarg - Xây dựng và thực hiện các lệnh từ đầu vào đã cho. Theo mặc định, khoảng trắng phân tách dòng thành đối số. ( Wikipedia )
--delimiter='\n'
Các đối số riêng biệt trên mỗi dòng mới (\ n) thay vì khoảng trắng.--replace=$ipaddress
Đối với mỗi dòng, lưu trữ đối số vào $ ipaddress .snmpget hoặc snmpwalk - Sử dụng yêu cầu SNMP GET để truy vấn thông tin về thực thể mạng. ( net-snmp.org , thông tin thêm về SNMP trên Wikipedia )
-c public
Đặt chuỗi cộng đồng thành công khai.-v 1
Đặt phiên bản SNMP thành 1.-O v
Đừng in OID.system.sysDescr.0
Biến để truy vấn. Mô tả về biến đặc biệt này: "Mô tả văn bản của thực thể. Giá trị này phải bao gồm tên đầy đủ và phiên bản nhận dạng của loại phần cứng, hệ điều hành phần mềm và phần mềm mạng. Điều này bắt buộc chỉ có chứa các ký tự ASCII có thể in được. "sed - Phân tích và biến đổi văn bản. ( Wikipedia )
's/day/night/'
Tìm sự xuất hiện đầu tiên của ngày chuỗi trong một dòng và thay thế nó bằng đêm.'s/STRING:\s//'
Tìm CHUINGI: \ s và thay thế nó bằng không có gì. Điều này sẽ loại bỏ CHUINGI: \ s khỏi đầu vào. \ s là viết tắt của một khoảng trắng.Có một số lệnh được hỗ trợ UNIX liên quan. Cá nhân tôi đã làm cho chuỗi này hoạt động trên máy Windows sử dụng Cygwin để có được các lệnh đó.
nmap -p 515,631,9100 -oG - 192.168.100.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs -I{} sh -c 'echo {} ; snmpget -v 1 -O v -c public {} system.sysDescr.0' | sed 's/STRING:\s//'
Cách dễ nhất là quét bằng nmap -O
: nmap thường sẽ xác định chính xác xem máy có phải là máy in hay không dựa trên HĐH.
nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
Nên làm cho nó một mục nhập trên mỗi dòng và kết xuất nó vào một tệp có tên là "outfile". Rõ ràng thay đổi phạm vi ip thành bất kỳ phạm vi nào bạn đang quét