有兩種方式可以查看:
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站10余年經(jīng)驗成就非凡,專業(yè)從事成都網(wǎng)站制作、成都做網(wǎng)站,成都網(wǎng)頁設(shè)計,成都網(wǎng)頁制作,軟文發(fā)稿,1元廣告等。10余年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:13518219792,我們期待您的來電!
A、直接通過網(wǎng)絡(luò)圖標(biāo)本地屬性查看;
B、通過運行命令提示符進(jìn)行查看。
具體操作如下:
1.通過網(wǎng)絡(luò)圖標(biāo)本地屬性查看:右鍵桌面右下角的網(wǎng)絡(luò)圖標(biāo) — 點擊打開共享和網(wǎng)絡(luò)中心 — 本地連接 — 詳細(xì)信息 就能查看到電腦的IP地址。
2.通過運行命令提示符進(jìn)行查看:同時按win+R鍵,在彈框里輸入CMD后enter,再輸入ipconfig/all,就能夠看到ip地址
經(jīng)常碰到系統(tǒng)跑著跑著一段時間內(nèi)存滿了,出現(xiàn)內(nèi)存泄漏的問題,系統(tǒng)軟件太龐大,這類問題又不好直接從源碼中分析,所以需要借助工具來分析了,kmemleak就是這樣的一個工具。
在Kernel?hacking中打開CONFIG_DEBUG_KMEMLEAK =y即使能了kmemleak,其實就是開了一個內(nèi)核線程,該內(nèi)核線程每10分鐘(默認(rèn)值)掃描內(nèi)存,并打印發(fā)現(xiàn)新的未引用的對象的數(shù)量。kmemleak的原理其實就是通過kmalloc、vmalloc、kmem_cache_alloc等內(nèi)存的分配,跟蹤其指針,連同其他的分配大小和堆棧跟蹤信息,存儲在PRIO搜索樹。如果存在相應(yīng)的釋放函數(shù)調(diào)用跟蹤和指針,就會從kmemleak數(shù)據(jù)結(jié)構(gòu)中移除。下面我們看看具體的用法。
查看內(nèi)核打印信息詳細(xì)過程如下:
1、掛載debugfs文件系統(tǒng)
mount?-t?debugfs?nodev?/sys/kernel/debug/
2、開啟內(nèi)核自動檢測線程
echo?scan??/sys/kernel/debug/kmemleak
3、查看打印信息
cat?/sys/kernel/debug/kmemleak
4、清除內(nèi)核檢測報告,新的內(nèi)存泄露報告將重新寫入/sys/kernel/debug/kmemleak
echo?clear??/sys/kernel/debug/kmemleak
內(nèi)存掃描參數(shù)可以進(jìn)行修改通過向/sys/kernel/debug/kmemleak?文件寫入。?參數(shù)使用如下:
off 禁用kmemleak(不可逆)
stack=on 啟用任務(wù)堆棧掃描(default)
stack=off 禁用任務(wù)堆棧掃描
scan=on 啟動自動記憶掃描線程(default)
scan=off 停止自動記憶掃描線程
scan=secs 設(shè)置n秒內(nèi)自動記憶掃描,默認(rèn)600s
scan 開啟內(nèi)核掃描
clear 清除內(nèi)存泄露報告
dump=addr 轉(zhuǎn)存信息對象在addr
通過“kmemleak?=?off”,也可以在啟動時禁用Kmemleak在內(nèi)核命令行。在初始化kmemleak之前,內(nèi)存的分配或釋放這些動作被存儲在一個前期日志緩沖區(qū)。這個緩沖區(qū)的大小通過配CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE設(shè)置。
Linux常用命令大全
系統(tǒng)信息
arch 顯示機(jī)器的處理器架構(gòu)(1)
uname -m 顯示機(jī)器的處理器架構(gòu)(2)
uname -r 顯示正在使用的內(nèi)核版本
dmidecode -q 顯示硬件系統(tǒng)部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 羅列一個磁盤的架構(gòu)特性
hdparm -tT /dev/sda 在磁盤上執(zhí)行測試性讀取操作
cat /proc/cpuinfo 顯示CPU info的信息
cat /proc/interrupts 顯示中斷
cat /proc/meminfo 校驗內(nèi)存使用
cat /proc/swaps 顯示哪些swap被使用
cat /proc/version 顯示內(nèi)核的版本
cat /proc/net/dev 顯示網(wǎng)絡(luò)適配器及統(tǒng)計
cat /proc/mounts 顯示已加載的文件系統(tǒng)
lspci -tv 羅列 PCI 設(shè)備
lsusb -tv 顯示 USB 設(shè)備
date 顯示系統(tǒng)日期
cal 2007 顯示2007年的日歷表
date 041217002007.00 設(shè)置日期和時間 - 月日時分年.秒
clock -w 將時間修改保存到 BIOS
關(guān)機(jī) (系統(tǒng)的關(guān)機(jī)、重啟以及登出 )
shutdown -h now 關(guān)閉系統(tǒng)(1)
init 0 關(guān)閉系統(tǒng)(2)
telinit 0 關(guān)閉系統(tǒng)(3)
shutdown -h hours:minutes 按預(yù)定時間關(guān)閉系統(tǒng)
shutdown -c 取消按預(yù)定時間關(guān)閉系統(tǒng)
shutdown -r now 重啟(1)
reboot 重啟(2)
logout 注銷
文件和目錄
cd /home 進(jìn)入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
cd 進(jìn)入個人的主目錄
cd ~user1 進(jìn)入個人的主目錄
cd - 返回上次所在的目錄
pwd 顯示工作路徑
ls 查看目錄中的文件
ls -F 查看目錄中的文件
ls -l 顯示文件和目錄的詳細(xì)資料
ls -a 顯示隱藏文件
ls *[0-9]* 顯示包含數(shù)字的文件名和目錄名
tree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(1)
lstree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(2)
mkdir dir1 創(chuàng)建一個叫做 'dir1' 的目錄'
mkdir dir1 dir2 同時創(chuàng)建兩個目錄
mkdir -p /tmp/dir1/dir2 創(chuàng)建一個目錄樹
rm -f file1 刪除一個叫做 'file1' 的文件'
rmdir dir1 刪除一個叫做 'dir1' 的目錄'
rm -rf dir1 刪除一個叫做 'dir1' 的目錄并同時刪除其內(nèi)容
rm -rf dir1 dir2 同時刪除兩個目錄及它們的內(nèi)容
mv dir1 new_dir 重命名/移動 一個目錄
cp file1 file2 復(fù)制一個文件
cp dir/* . 復(fù)制一個目錄下的所有文件到當(dāng)前工作目錄
cp -a /tmp/dir1 . 復(fù)制一個目錄到當(dāng)前工作目錄
cp -a dir1 dir2 復(fù)制一個目錄
ln -s file1 lnk1 創(chuàng)建一個指向文件或目錄的軟鏈接
ln file1 lnk1 創(chuàng)建一個指向文件或目錄的物理鏈接
touch -t 0712250000 file1 修改一個文件或目錄的時間戳 - (YYMMDDhhmm)
file file1 outputs the mime type of the file as text
iconv -l 列出已知的編碼
iconv -f fromEncoding -t toEncoding inputFile outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.
find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)
文件搜索
find / -name file1 從 '/' 開始進(jìn)入根文件系統(tǒng)搜索文件和目錄
find / -user user1 搜索屬于用戶 'user1' 的文件和目錄
find /home/user1 -name \*.bin 在目錄 '/ home/user1' 中搜索帶有'.bin' 結(jié)尾的文件
find /usr/bin -type f -atime +100 搜索在過去100天內(nèi)未被使用過的執(zhí)行文件
find /usr/bin -type f -mtime -10 搜索在10天內(nèi)被創(chuàng)建或者修改過的文件
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 結(jié)尾的文件并定義其權(quán)限
find / -xdev -name \*.rpm 搜索以 '.rpm' 結(jié)尾的文件,忽略光驅(qū)、捷盤等可移動設(shè)備
locate \*.ps 尋找以 '.ps' 結(jié)尾的文件 - 先運行 'updatedb' 命令
whereis halt 顯示一個二進(jìn)制文件、源碼或man的位置
which halt 顯示一個二進(jìn)制文件或可執(zhí)行文件的完整路徑
掛載一個文件系統(tǒng)
mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經(jīng)存在
umount /dev/hda2 卸載一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出
fuser -km /mnt/hda2 當(dāng)設(shè)備繁忙時強(qiáng)制卸載
umount -n /mnt/hda2 運行卸載操作而不寫入 /etc/mtab 文件- 當(dāng)文件為只讀或當(dāng)磁盤寫滿時非常有用
mount /dev/fd0 /mnt/floppy 掛載一個軟盤
mount /dev/cdrom /mnt/cdrom 掛載一個cdrom或dvdrom
mount /dev/hdc /mnt/cdrecorder 掛載一個cdrw或dvdrom
mount /dev/hdb /mnt/cdrecorder 掛載一個cdrw或dvdrom
mount -o loop file.iso /mnt/cdrom 掛載一個文件或ISO鏡像文件
mount -t vfat /dev/hda5 /mnt/hda5 掛載一個Windows FAT32文件系統(tǒng)
mount /dev/sda1 /mnt/usbdisk 掛載一個usb 捷盤或閃存設(shè)備
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 掛載一個windows網(wǎng)絡(luò)共享
磁盤空間
df -h 顯示已經(jīng)掛載的分區(qū)列表
ls -lSr |more 以尺寸大小排列文件和目錄
du -sh dir1 估算目錄 'dir1' 已經(jīng)使用的磁盤空間'
du -sk * | sort -rn 以容量大小為依據(jù)依次顯示文件和目錄的大小
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小為依據(jù)依次顯示已安裝的rpm包所使用的空間 (fedora, redhat類系統(tǒng))
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小為依據(jù)顯示已安裝的deb包所使用的空間 (ubuntu, debian類系統(tǒng))
返回頂部索引 ^
用戶和群組
groupadd group_name 創(chuàng)建一個新用戶組
groupdel group_name 刪除一個用戶組
groupmod -n new_group_name old_group_name 重命名一個用戶組
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 創(chuàng)建一個屬于 "admin" 用戶組的用戶
useradd user1 創(chuàng)建一個新用戶
userdel -r user1 刪除一個用戶 ( '-r' 排除主目錄)
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用戶屬性
passwd 修改口令
passwd user1 修改一個用戶的口令 (只允許root執(zhí)行)
chage -E 2005-12-31 user1 設(shè)置用戶口令的失效期限
pwck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的用戶
grpck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的群組
newgrp group_name 登陸進(jìn)一個新的群組以改變新創(chuàng)建文件的預(yù)設(shè)群組
返回頂部索引 ^
文件的權(quán)限 - 使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消
ls -lh 顯示權(quán)限
ls /tmp | pr -T5 -W$COLUMNS 將終端劃分成5欄顯示
chmod ugo+rwx directory1 設(shè)置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r )、寫(w)和執(zhí)行(x)的權(quán)限
chmod go-rwx directory1 刪除群組(g)與其他人(o)對目錄的讀寫執(zhí)行權(quán)限
chown user1 file1 改變一個文件的所有人屬性
chown -R user1 directory1 改變一個目錄的所有人屬性并同時改變改目錄下所有文件的屬性
chgrp group1 file1 改變文件的群組
chown user1:group1 file1 改變一個文件的所有人和群組屬性
find / -perm -u+s 羅列一個系統(tǒng)中所有使用了SUID控制的文件
chmod u+s /bin/file1 設(shè)置一個二進(jìn)制文件的 SUID 位 - 運行該文件的用戶也被賦予和所有者同樣的權(quán)限
chmod u-s /bin/file1 禁用一個二進(jìn)制文件的 SUID位
chmod g+s /home/public 設(shè)置一個目錄的SGID 位 - 類似SUID ,不過這是針對目錄的
chmod g-s /home/public 禁用一個目錄的 SGID 位
chmod o+t /home/public 設(shè)置一個文件的 STIKY 位 - 只允許合法所有人刪除文件
chmod o-t /home/public 禁用一個目錄的 STIKY 位
返回頂部索引 ^
文件的特殊屬性 - 使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消
chattr +a file1 只允許以追加方式讀寫文件
chattr +c file1 允許這個文件能被內(nèi)核自動壓縮/解壓
chattr +d file1 在進(jìn)行文件系統(tǒng)備份時,dump程序?qū)⒑雎赃@個文件
chattr +i file1 設(shè)置成不可變的文件,不能被刪除、修改、重命名或者鏈接
chattr +s file1 允許一個文件被安全地刪除
chattr +S file1 一旦應(yīng)用程序?qū)@個文件執(zhí)行了寫操作,使系統(tǒng)立刻把修改的結(jié)果寫到磁盤
chattr +u file1 若文件被刪除,系統(tǒng)會允許你在以后恢復(fù)這個被刪除的文件
lsattr 顯示特殊的屬性
返回頂部索引 ^
打包和壓縮文件
bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的文件
bzip2 file1 壓縮一個叫做 'file1' 的文件
gunzip file1.gz 解壓一個叫做 'file1.gz'的文件
gzip file1 壓縮一個叫做 'file1'的文件
gzip -9 file1 最大程度壓縮
rar a file1.rar test_file 創(chuàng)建一個叫做 'file1.rar' 的包
rar a file1.rar file1 file2 dir1 同時壓縮 'file1', 'file2' 以及目錄 'dir1'
rar x file1.rar 解壓rar包
unrar x file1.rar 解壓rar包
tar -cvf archive.tar file1 創(chuàng)建一個非壓縮的 tarball
tar -cvf archive.tar file1 file2 dir1 創(chuàng)建一個包含了 'file1', 'file2' 以及 'dir1'的檔案文件
tar -tf archive.tar 顯示一個包中的內(nèi)容
tar -xvf archive.tar 釋放一個包
tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下
tar -cvfj archive.tar.bz2 dir1 創(chuàng)建一個bzip2格式的壓縮包
tar -xvfj archive.tar.bz2 解壓一個bzip2格式的壓縮包
tar -cvfz archive.tar.gz dir1 創(chuàng)建一個gzip格式的壓縮包
tar -xvfz archive.tar.gz 解壓一個gzip格式的壓縮包
zip file1.zip file1 創(chuàng)建一個zip格式的壓縮包
zip -r file1.zip file1 file2 dir1 將幾個文件和目錄同時壓縮成一個zip格式的壓縮包
unzip file1.zip 解壓一個zip格式壓縮包
返回頂部索引 ^
RPM 包 - (Fedora, Redhat及類似系統(tǒng))
rpm -ivh package.rpm 安裝一個rpm包
rpm -ivh --nodeeps package.rpm 安裝一個rpm包而忽略依賴關(guān)系警告
rpm -U package.rpm 更新一個rpm包但不改變其配置文件
rpm -F package.rpm 更新一個確定已經(jīng)安裝的rpm包
rpm -e package_name.rpm 刪除一個rpm包
rpm -qa 顯示系統(tǒng)中所有已經(jīng)安裝的rpm包
rpm -qa | grep httpd 顯示所有名稱中包含 "httpd" 字樣的rpm包
rpm -qi package_name 獲取一個已安裝包的特殊信息
rpm -qg "System Environment/Daemons" 顯示一個組件的rpm包
rpm -ql package_name 顯示一個已經(jīng)安裝的rpm包提供的文件列表
rpm -qc package_name 顯示一個已經(jīng)安裝的rpm包提供的配置文件列表
rpm -q package_name --whatrequires 顯示與一個rpm包存在依賴關(guān)系的列表
rpm -q package_name --whatprovides 顯示一個rpm包所占的體積
rpm -q package_name --scripts 顯示在安裝/刪除期間所執(zhí)行的腳本l
rpm -q package_name --changelog 顯示一個rpm包的修改歷史
rpm -qf /etc/httpd/conf/httpd.conf 確認(rèn)所給的文件由哪個rpm包所提供
rpm -qp package.rpm -l 顯示由一個尚未安裝的rpm包提供的文件列表
rpm --import /media/cdrom/RPM-GPG-KEY 導(dǎo)入公鑰數(shù)字證書
rpm --checksig package.rpm 確認(rèn)一個rpm包的完整性
rpm -qa gpg-pubkey 確認(rèn)已安裝的所有rpm包的完整性
rpm -V package_name 檢查文件尺寸、 許可、類型、所有者、群組、MD5檢查以及最后修改時間
rpm -Va 檢查系統(tǒng)中所有已安裝的rpm包- 小心使用
rpm -Vp package.rpm 確認(rèn)一個rpm包還未安裝
rpm2cpio package.rpm | cpio --extract --make-directories *bin* 從一個rpm包運行可執(zhí)行文件
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 從一個rpm源碼安裝一個構(gòu)建好的包
rpmbuild --rebuild package_name.src.rpm 從一個rpm源碼構(gòu)建一個 rpm 包
返回頂部索引 ^
YUM 軟件包升級器 - (Fedora, RedHat及類似系統(tǒng))
yum install package_name 下載并安裝一個rpm包
yum localinstall package_name.rpm 將安裝一個rpm包,使用你自己的軟件倉庫為你解決所有依賴關(guān)系
yum update package_name.rpm 更新當(dāng)前系統(tǒng)中所有安裝的rpm包
yum update package_name 更新一個rpm包
yum remove package_name 刪除一個rpm包
yum list 列出當(dāng)前系統(tǒng)中安裝的所有包
yum search package_name 在rpm倉庫中搜尋軟件包
yum clean packages 清理rpm緩存刪除下載的包
yum clean headers 刪除所有頭文件
yum clean all 刪除所有緩存的包和頭文件
返回頂部索引 ^
DEB 包 (Debian, Ubuntu 以及類似系統(tǒng))
dpkg -i package.deb 安裝/更新一個 deb 包
dpkg -r package_name 從系統(tǒng)刪除一個 deb 包
dpkg -l 顯示系統(tǒng)中所有已經(jīng)安裝的 deb 包
dpkg -l | grep httpd 顯示所有名稱中包含 "httpd" 字樣的deb包
dpkg -s package_name 獲得已經(jīng)安裝在系統(tǒng)中一個特殊包的信息
dpkg -L package_name 顯示系統(tǒng)中已經(jīng)安裝的一個deb包所提供的文件列表
dpkg --contents package.deb 顯示尚未安裝的一個包所提供的文件列表
dpkg -S /bin/ping 確認(rèn)所給的文件由哪個deb包提供
返回頂部索引 ^
APT 軟件工具 (Debian, Ubuntu 以及類似系統(tǒng))
apt-get install package_name 安裝/更新一個 deb 包
apt-cdrom install package_name 從光盤安裝/更新一個 deb 包
apt-get update 升級列表中的軟件包
apt-get upgrade 升級所有已安裝的軟件
apt-get remove package_name 從系統(tǒng)刪除一個deb包
apt-get check 確認(rèn)依賴的軟件倉庫正確
apt-get clean 從下載的軟件包中清理緩存
apt-cache search searched-package 返回包含所要搜索字符串的軟件包名稱
返回頂部索引 ^
查看文件內(nèi)容
cat file1 從第一個字節(jié)開始正向查看文件的內(nèi)容
tac file1 從最后一行開始反向查看一個文件的內(nèi)容
more file1 查看一個長文件的內(nèi)容
less file1 類似于 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作
head -2 file1 查看一個文件的前兩行
tail -2 file1 查看一個文件的最后兩行
tail -f /var/log/messages 實時查看被添加到一個文件中的內(nèi)容
返回頂部索引 ^
文本處理
cat file1 file2 ... | command file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT
cat file1 | command( sed, grep, awk, grep, etc...) result.txt 合并一個文件的詳細(xì)說明文本,并將簡介寫入一個新文件中
cat file1 | command( sed, grep, awk, grep, etc...) result.txt 合并一個文件的詳細(xì)說明文本,并將簡介寫入一個已有的文件中
grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關(guān)鍵詞"Aug"
grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"開始的詞匯
grep [0-9] /var/log/messages 選擇 '/var/log/messages' 文件中所有包含數(shù)字的行
grep Aug -R /var/log/* 在目錄 '/var/log' 及隨后的目錄中搜索字符串"Aug"
sed 's/stringa1/stringa2/g' example.txt 將example.txt文件中的 "string1" 替換成 "string2"
sed '/^$/d' example.txt 從example.txt文件中刪除所有空白行
sed '/ *#/d; /^$/d' example.txt 從example.txt文件中刪除所有注釋和空白行
echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下單元格內(nèi)容
sed -e '1d' result.txt 從文件example.txt 中排除第一行
sed -n '/stringa1/p' 查看只包含詞匯 "string1"的行
sed -e 's/ *$//' example.txt 刪除每一行最后的空白字符
sed -e 's/stringa1//g' example.txt 從文檔中只刪除詞匯 "string1" 并保留剩余全部
sed -n '1,5p;5q' example.txt 查看從第一行到第5行內(nèi)容
sed -n '5p;5q' example.txt 查看第5行
sed -e 's/00*/0/g' example.txt 用單個零替換多個零
cat -n file1 標(biāo)示文件的行數(shù)
cat example.txt | awk 'NR%2==1' 刪除example.txt文件中的所有偶數(shù)行
echo a b c | awk '{print $1}' 查看一行第一欄
echo a b c | awk '{print $1,$3}' 查看一行的第一和第三欄
paste file1 file2 合并兩個文件或兩欄的內(nèi)容
paste -d '+' file1 file2 合并兩個文件或兩欄的內(nèi)容,中間用"+"區(qū)分
sort file1 file2 排序兩個文件的內(nèi)容
sort file1 file2 | uniq 取出兩個文件的并集(重復(fù)的行只保留一份)
sort file1 file2 | uniq -u 刪除交集,留下其他的行
sort file1 file2 | uniq -d 取出兩個文件的交集(只留下同時存在于兩個文件中的文件)
comm -1 file1 file2 比較兩個文件的內(nèi)容只刪除 'file1' 所包含的內(nèi)容
comm -2 file1 file2 比較兩個文件的內(nèi)容只刪除 'file2' 所包含的內(nèi)容
comm -3 file1 file2 比較兩個文件的內(nèi)容只刪除兩個文件共有的部分
返回頂部索引 ^
字符設(shè)置和文件格式轉(zhuǎn)換
dos2unix filedos.txt fileunix.txt 將一個文本文件的格式從MSDOS轉(zhuǎn)換成UNIX
unix2dos fileunix.txt filedos.txt 將一個文本文件的格式從UNIX轉(zhuǎn)換成MSDOS
recode ..HTML page.txt page.html 將一個文本文件轉(zhuǎn)換成html
recode -l | more 顯示所有允許的轉(zhuǎn)換格式
返回頂部索引 ^
文件系統(tǒng)分析
badblocks -v /dev/hda1 檢查磁盤hda1上的壞磁塊
fsck /dev/hda1 修復(fù)/檢查hda1磁盤上linux文件系統(tǒng)的完整性
fsck.ext2 /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性
e2fsck /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性
e2fsck -j /dev/hda1 修復(fù)/檢查hda1磁盤上ext3文件系統(tǒng)的完整性
fsck.ext3 /dev/hda1 修復(fù)/檢查hda1磁盤上ext3文件系統(tǒng)的完整性
fsck.vfat /dev/hda1 修復(fù)/檢查hda1磁盤上fat文件系統(tǒng)的完整性
fsck.msdos /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性
dosfsck /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性
返回頂部索引 ^
初始化一個文件系統(tǒng)
mkfs /dev/hda1 在hda1分區(qū)創(chuàng)建一個文件系統(tǒng)
mke2fs /dev/hda1 在hda1分區(qū)創(chuàng)建一個linux ext2的文件系統(tǒng)
mke2fs -j /dev/hda1 在hda1分區(qū)創(chuàng)建一個linux ext3(日志型)的文件系統(tǒng)
mkfs -t vfat 32 -F /dev/hda1 創(chuàng)建一個 FAT32 文件系統(tǒng)
fdformat -n /dev/fd0 格式化一個軟盤
mkswap /dev/hda3 創(chuàng)建一個swap文件系統(tǒng)
返回頂部索引 ^
SWAP文件系統(tǒng)
mkswap /dev/hda3 創(chuàng)建一個swap文件系統(tǒng)
swapon /dev/hda3 啟用一個新的swap文件系統(tǒng)
swapon /dev/hda2 /dev/hdb3 啟用兩個swap分區(qū)
返回頂部索引 ^
備份
dump -0aj -f /tmp/home0.bak /home 制作一個 '/home' 目錄的完整備份
dump -1aj -f /tmp/home0.bak /home 制作一個 '/home' 目錄的交互式備份
restore -if /tmp/home0.bak 還原一個交互式備份
rsync -rogpav --delete /home /tmp 同步兩邊的目錄
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通過SSH通道rsync
rsync -az -e ssh --delete ip_addr:/home/public /home/local 通過ssh和壓縮將一個遠(yuǎn)程目錄同步到本地目錄
rsync -az -e ssh --delete /home/local ip_addr:/home/public 通過ssh和壓縮將本地目錄同步到遠(yuǎn)程目錄
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通過ssh在遠(yuǎn)程主機(jī)上執(zhí)行一次備份本地磁盤的操作
dd if=/dev/sda of=/tmp/file1 備份磁盤內(nèi)容到一個文件
tar -Puf backup.tar /home/user 執(zhí)行一次對 '/home/user' 目錄的交互式備份操作
( cd /tmp/local/ tar c . ) | ssh -C user@ip_addr 'cd /home/share/ tar x -p' 通過ssh在遠(yuǎn)程目錄中復(fù)制一個目錄內(nèi)容
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home tar x -p' 通過ssh在遠(yuǎn)程目錄中復(fù)制一個本地目錄
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地將一個目錄復(fù)制到另一個地方,保留原有權(quán)限及鏈接
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 從一個目錄查找并復(fù)制所有以 '.txt' 結(jié)尾的文件到另一個目錄
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 log.tar.bz2 查找所有以 '.log' 結(jié)尾的文件并做成一個bzip包
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一個將 MBR (Master Boot Record)內(nèi)容復(fù)制到軟盤的動作
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 從已經(jīng)保存到軟盤的備份中恢復(fù)MBR內(nèi)容
返回頂部索引 ^
光盤
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個可復(fù)寫的光盤內(nèi)容
mkisofs /dev/cdrom cd.iso 在磁盤上創(chuàng)建一個光盤的iso鏡像文件
mkisofs /dev/cdrom | gzip cd_iso.gz 在磁盤上創(chuàng)建一個壓縮了的光盤iso鏡像文件
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 創(chuàng)建一個目錄的iso鏡像文件
cdrecord -v dev=/dev/cdrom cd.iso 刻錄一個ISO鏡像文件
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻錄一個壓縮了的ISO鏡像文件
mount -o loop cd.iso /mnt/iso 掛載一個ISO鏡像文件
cd-paranoia -B 從一個CD光盤轉(zhuǎn)錄音軌到 wav 文件中
cd-paranoia -- "-3" 從一個CD光盤轉(zhuǎn)錄音軌到 wav 文件中(參數(shù)-3)
cdrecord --scanbus 掃描總線以識別scsi通道
dd if=/dev/hdc | md5sum 校驗一個設(shè)備的md5sum編碼,例如一張 CD
返回頂部索引 ^
網(wǎng)絡(luò) - (以太網(wǎng)和WIFI無線)
ifconfig eth0 顯示一個以太網(wǎng)卡的配置
ifup eth0 啟用一個 'eth0' 網(wǎng)絡(luò)設(shè)備
ifdown eth0 禁用一個 'eth0' 網(wǎng)絡(luò)設(shè)備
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址
ifconfig eth0 promisc 設(shè)置 'eth0' 成混雜模式以嗅探數(shù)據(jù)包 (sniffing)
dhclient eth0 以dhcp模式啟用 'eth0'
route -n show routing table
route add -net 0/0 gw IP_Gateway configura default gateway
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'
route del 0/0 gw IP_gateway remove static route
echo "1" /proc/sys/net/ipv4/ip_forward activate ip routing
hostname show hostname of system
host lookup hostname to resolve name to ip address and viceversa(1)
nslookup lookup hostname to resolve name to ip address and viceversa(2)
ip link show show link status of all interfaces
mii-tool eth0 show link status of 'eth0'
ethtool eth0 show statistics of network card 'eth0'
netstat -tup show all active network connections and their PID
netstat -tupl show all network services listening on the system and their PID
tcpdump tcp port 80 show all HTTP traffic
iwlist scan show wireless networks
iwconfig eth1 show configuration of a wireless network card
hostname show hostname
host lookup hostname to resolve name to ip address and viceversa
nslookup lookup hostname to resolve name to ip address and viceversa
whois lookup on Whois database
GO TOP INDEX ^
Microsoft Windows networks (SAMBA)
nbtscan ip_addr netbios name resolution
nmblookup -A ip_addr netbios name resolution
smbclient -L ip_addr/hostname show remote shares of a windows host
smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a windows network share
執(zhí)行 TCP 端口掃描的一種方式就是執(zhí)行一部分。目標(biāo)端口上的 TCP 三次握手用于識別端口是否接受連接。這一類型的掃描指代隱秘掃描, SYN 掃描,或者半開放掃描。這個秘籍演示了如何使用 Scapy 執(zhí)行 TCP 隱秘掃描。
為了使用 Scapy 執(zhí)行 TCP 隱秘 掃描,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
此外,這一節(jié)也需要編寫腳本的更多信息,請參考第一章中的“使用文本編輯器*VIM 和 Nano)。
為了展示如何執(zhí)行 SYN 掃描,我們需要使用 Scapy 構(gòu)造 TCP SYN 請求,并識別和開放端口、關(guān)閉端口以及無響應(yīng)系統(tǒng)有關(guān)的響應(yīng)。為了向給定端口發(fā)送 TCP SYN 請求,我們首先需要構(gòu)建請求的各個層面。我們需要構(gòu)建的第一層就是 IP 層:
為了構(gòu)建請求的 IP 層,我們需要將 IP 對象賦給變量 i 。通過調(diào)用 display 函數(shù),我們可以確定對象的屬性配置。通常,發(fā)送和接受地址都設(shè)為回送地址, 127.0.0.1 。這些值可以通過修改目標(biāo)地址來修改,也就是設(shè)置 i.dst 為想要掃描的地址的字符串值。通過再次調(diào)用 dislay 函數(shù),我們看到不僅僅更新的目標(biāo)地址,也自動更新了和默認(rèn)接口相關(guān)的源 IP 地址?,F(xiàn)在我們構(gòu)建了請求的 IP 層,我們可以構(gòu)建 TCP 層了。
為了構(gòu)建請求的 TCP 層,我們使用和 IP 層相同的技巧。在這個立即中, TCP 對象賦給了 t 變量。像之前提到的那樣,默認(rèn)的配置可以通過調(diào)用 display 函數(shù)來確定。這里我們可以看到目標(biāo)端口的默認(rèn)值為 HTTP 端口 80。對于我們的首次掃描,我們將 TCP 設(shè)置保留默認(rèn)。現(xiàn)在我們創(chuàng)建了 TCP 和 IP 層,我們需要將它們疊放來構(gòu)造請求。
我們可以通過以斜杠分離變量來疊放 IP 和 TCP 層。這些層面之后賦給了新的變量,它代表整個請求。我們之后可以調(diào)用 dispaly 函數(shù)來查看請求的配置。一旦構(gòu)建了請求,可以將其傳遞給 sr1 函數(shù)來分析響應(yīng):
相同的請求可以不通過構(gòu)建和堆疊每一層來執(zhí)行。反之,我們使用單獨的一條命令,通過直接調(diào)用函數(shù)并傳遞合適的參數(shù):
要注意當(dāng) SYN 封包發(fā)往目標(biāo) Web 服務(wù)器的 TCP 端口 80,并且該端口上運行了 HTTP 服務(wù)時,響應(yīng)中會帶有 TCP 標(biāo)識 SA 的值,這表明 SYN 和 ACK 標(biāo)識都被激活。這個響應(yīng)表明特定的目標(biāo)端口是開放的,并接受連接。如果相同類型的封包發(fā)往不接受連接的端口,會收到不同的請求。
當(dāng) SYN 請求發(fā)送給關(guān)閉的端口時,返回的響應(yīng)中帶有 TCP 標(biāo)識 RA,這表明 RST 和 ACK 標(biāo)識為都被激活。ACK 為僅僅用于承認(rèn)請求被接受,RST 為用于斷開連接,因為端口不接受連接。作為替代,如果 SYN 封包發(fā)往崩潰的系統(tǒng),或者防火墻過濾了這個請求,就可能接受不到任何信息。由于這個原因,在 sr1 函數(shù)在腳本中使用時,應(yīng)該始終使用 timeout 選項,來確保腳本不會在無響應(yīng)的主機(jī)上掛起。
如果函數(shù)對無響應(yīng)的主機(jī)使用時, timeout 值沒有指定,函數(shù)會無限繼續(xù)下去。這個演示中, timout 值為 1秒,用于使這個函數(shù)更加完備,響應(yīng)的值可以用于判斷是否收到了響應(yīng):
Python 的使用使其更易于測試變量來識別 sr1 函數(shù)是否對其復(fù)制。這可以用作初步檢驗,來判斷是否接收到了任何響應(yīng)。對于接收到的響應(yīng),可以執(zhí)行一系列后續(xù)檢查來判斷響應(yīng)表明端口開放還是關(guān)閉。這些東西可以輕易使用 Python 腳本來完成,像這樣:
在這個 Python 腳本中,用于被提示來輸入 IP 地址,腳本之后會對定義好的端口序列執(zhí)行 SYN 掃描。腳本之后會得到每個連接的響應(yīng),并嘗試判斷響應(yīng)的 SYN 和 ACK 標(biāo)識是否激活。如果響應(yīng)中出現(xiàn)并僅僅出現(xiàn)了這些標(biāo)識,那么會輸出相應(yīng)的端口號碼。
運行這個腳本之后,輸出會顯示所提供的 IP 地址的系統(tǒng)上,前 100 個端口中的開放端口。
這一類型的掃描由發(fā)送初始 SYN 封包給遠(yuǎn)程系統(tǒng)的目標(biāo) TCP 端口,并且通過返回的響應(yīng)類型來判斷端口狀態(tài)來完成。如果遠(yuǎn)程系統(tǒng)返回了 SYN+ACK 響應(yīng),那么它正在準(zhǔn)備建立連接,我們可以假設(shè)這個端口開放。如果服務(wù)返回了 RST 封包,這就表明端口關(guān)閉并且不接收連接。此外,如果沒有返回響應(yīng),掃描系統(tǒng)和遠(yuǎn)程系統(tǒng)之間可能存在防火墻,它丟棄了請求。這也可能表明主機(jī)崩潰或者目標(biāo) IP 上沒有關(guān)聯(lián)任何系統(tǒng)。
Nmap 擁有可以執(zhí)行遠(yuǎn)程系統(tǒng) SYN 掃描的掃描模式。這個秘籍展示了如何使用 Namp 執(zhí)行 TCP 隱秘掃描。
為了使用 Nmap 執(zhí)行 TCP 隱秘掃描,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
就像多數(shù)掃描需求那樣,Nmap 擁有簡化 TCP 隱秘掃描執(zhí)行過程的選項。為了使用 Nmap 執(zhí)行 TCP 隱秘掃描,應(yīng)使用 -sS 選項,并附帶被掃描主機(jī)的 IP 地址。
在提供的例子中,特定的 IP 地址的 TCP 80 端口上執(zhí)行了 TCP 隱秘掃描。和 Scapy 中的技巧相似,Nmap 監(jiān)聽響應(yīng)并通過分析響應(yīng)中所激活的 TCP 標(biāo)識來識別開放端口。我們也可以使用 Namp 執(zhí)行多個特定端口的掃描,通過傳遞逗號分隔的端口號列表。
在這個例子中,目標(biāo) IP 地址的端口 21、80 和 443 上執(zhí)行了 SYN 掃描。我們也可以使用 Namp 來掃描主機(jī)序列,通過標(biāo)明要掃描的第一個和最后一個端口號,以破折號分隔:
在所提供的例子中,SYN 掃描在 TCP 20 到 25 端口上執(zhí)行。除了擁有指定被掃描端口的能力之外。Nmap 同時擁有配置好的 1000 和常用端口的列表。我們可以執(zhí)行這些端口上的掃描,通過不帶任何端口指定信息來運行 Nmap:
在上面的例子中,掃描了 Nmap 定義的 1000 個常用端口,用于識別 Metasploitable2 系統(tǒng)上的大量開放端口。雖然這個技巧在是被多數(shù)設(shè)備上很高效,但是也可能無法識別模糊的服務(wù)或者不常見的端口組合。如果掃描在所有可能的 TCP 端口上執(zhí)行,所有可能的端口地址值都需要被掃描。定義了源端口和目標(biāo)端口地址的 TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或者 65536 個可能的 TCP 端口地址。對于要掃描的全部可能的地址空間,需要提供 0 到 65535 的端口范圍,像這樣:
這個例子中,Metasploitable2 系統(tǒng)上所有可能的 65536 和 TCP 地址都掃描了一遍。要注意該掃描中識別的多數(shù)服務(wù)都在標(biāo)準(zhǔn)的 Nmap 1000 掃描中識別過了。這就表明在嘗試識別目標(biāo)的所有可能的攻擊面的時候,完整掃描是個最佳實踐。Nmap 可以使用破折號記法,掃描主機(jī)列表上的 TCP 端口:
這個例子中,TCP 80 端口的 SYN 掃描在指定地址范圍內(nèi)的所有主機(jī)上執(zhí)行。雖然這個特定的掃描僅僅執(zhí)行在單個端口上,Nmap 也能夠同時掃描多個系統(tǒng)上的多個端口和端口范圍。此外,Nmap 也能夠進(jìn)行配置,基于 IP 地址的輸入列表來掃描主機(jī)。這可以通過 -iL 選項并指定文件名,如果文件存放于執(zhí)行目錄中,或者文件路徑來完成。Nmap 之后會遍歷輸入列表中的每個地址,并對地址執(zhí)行特定的掃描。
Nmap SYN 掃描背后的底層機(jī)制已經(jīng)討論過了。但是,Nmap 擁有多線程功能,是用于執(zhí)行這類掃描的快速高效的方式。
除了其它已經(jīng)討論過的工具之外,Metasploit 擁有用于 SYN 掃描的輔助模塊。這個秘籍展示了如何使用 Metasploit 來執(zhí)行 TCP 隱秘掃描。
為了使用 Metasploit 執(zhí)行 TCP 隱秘掃描,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
Metasploit 擁有可以對特定 TCP 端口執(zhí)行 SYN 掃描的輔助模塊。為了在 Kali 中啟動 Metasploit,我們在終端中執(zhí)行 msfconsole 命令。
為了在 Metasploit 中執(zhí)行 SYN 掃描,以輔助模塊的相對路徑調(diào)用 use 命令。一旦模塊被選中,可以執(zhí)行 show options 命令來確認(rèn)或修改掃描配置。這個命令會展示四列的表格,包括 name 、 current settings 、 required 和 description 。 name 列標(biāo)出了每個可配置變量的名稱。 current settings 列列出了任何給定變量的現(xiàn)有配置。 required 列標(biāo)出對于任何給定變量,值是否是必須的。 description 列描述了每個變量的功能。任何給定變量的值可以使用 set 命令,并且將新的值作為參數(shù)來修改。
在上面的例子中, RHOSTS 值修改為我們打算掃描的遠(yuǎn)程系統(tǒng)的 IP 地址。地外,線程數(shù)量修改為 20。 THREADS 的值定義了在后臺執(zhí)行的當(dāng)前任務(wù)數(shù)量。確定線程數(shù)量涉及到尋找一個平衡,既能提升任務(wù)速度,又不會過度消耗系統(tǒng)資源。對于多數(shù)系統(tǒng),20 個線程可以足夠快,并且相當(dāng)合理。 PORTS 值設(shè)為 TCP 端口 80(HTTP)。修改了必要的變量之后,可以再次使用 show options 命令來驗證。一旦所需配置驗證完畢,就可以執(zhí)行掃描了。
上面的例子中,所指定的遠(yuǎn)程主機(jī)的錢 100 個 TCP 端口上執(zhí)行了 TCP SYN 掃描。雖然這個掃描識別了目標(biāo)系統(tǒng)的多個設(shè)備,我們不能確認(rèn)所有設(shè)備都識別出來,除非所有可能的端口地址都掃描到。定義來源和目標(biāo)端口地址的TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或 65536 個可能的 TCP 端口地址。對于要掃描的整個地址空間,需要提供 0 到 65535 的 端口范圍,像這樣:
在這個李忠,遠(yuǎn)程系統(tǒng)的所有開放端口都由掃描所有可能的 TCP 端口地址來識別。我們也可以修改掃描配置使用破折號記法來掃描地址序列。
這個例子中,TCP SYN 掃描執(zhí)行在由 RHOST 變量指定的所有主機(jī)地址的 80 端口上。與之相似, RHOSTS 可以使用 CIDR 記法定義網(wǎng)絡(luò)范圍。
Metasploit SYN 掃描輔助模塊背后的底層原理和任何其它 SYN 掃描工具一樣。對于每個被掃描的端口,會發(fā)送 SYN 封包。SYN+ACK 封包會用于識別活動服務(wù)。使用 MEtasploit 可能更加有吸引力,因為它擁有交互控制臺,也因為它是個已經(jīng)被多數(shù)滲透測試者熟知的工具。
除了我們之前學(xué)到了探索技巧,hping3 也可以用于執(zhí)行端口掃描。這個秘籍展示了如何使用 hping3 來執(zhí)行 TCP 隱秘掃描。
為了使用 hping3 執(zhí)行 TCP 隱秘掃描,你需要一個運行 TCP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
除了我們之前學(xué)到了探索技巧,hping3 也可以用于執(zhí)行端口掃描。為了使用 hping3 執(zhí)行端口掃描,我們需要以一個整數(shù)值使用 --scan 模式來指定要掃描的端口號。
上面的例子中,SYN 掃描執(zhí)行在指定 IP 地址的 TCP 端口 80 上。 -S 選項指明了發(fā)給遠(yuǎn)程系統(tǒng)的封包中激活的 TCP 標(biāo)識。表格展示了接收到的響應(yīng)封包中的屬性。我們可以從輸出中看到,接收到了SYN+ACK 響應(yīng),所以這表示目標(biāo)主機(jī)端口 80 是開放的。此外,我們可以通過輸入夠好分隔的端口號列表來掃描多個端口,像這樣:
在上面的掃描輸出中,你可以看到,僅僅展示了接受到 SYN+ACK 標(biāo)識的結(jié)果。要注意和發(fā)送到 443 端口的 SYN 請求相關(guān)的響應(yīng)并沒有展示。從輸出中可以看出,我們可以通過使用 -v 選項增加詳細(xì)讀來查看所有響應(yīng)。此外,可以通過傳遞第一個和最后一個端口地址值,來掃描端口范圍,像這樣:
這個例子中,100 個端口的掃描足以識別 Metasploitable2 系統(tǒng)上的服務(wù)。但是,為了執(zhí)行 所有 TCP 端口的掃描,需要掃描所有可能的端口地址值。定義了源端口和目標(biāo)端口地址的 TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或者 65536 個可能的 TCP 端口地址。對于要掃描的全部可能的地址空間,需要提供 0 到 65535 的端口范圍,像這樣:
hping3 不用于一些已經(jīng)提到的其它工具,因為它并沒有 SYN 掃描模式。但是反之,它允許你指定 TCP 封包發(fā)送時的激活的 TCP 標(biāo)識。在秘籍中的例子中, -S 選項讓 hping3 使用 TCP 封包的 SYN 標(biāo)識。
在多數(shù)掃描工具當(dāng)中,TCP 連接掃描比 SYN 掃描更加容易。這是因為 TCP 連接掃描并不需要為了生成和注入 SYN 掃描中使用的原始封包而提升權(quán)限。Scapy 是它的一大例外。Scapy 實際上非常難以執(zhí)行完全的 TCP 三次握手,也不實用。但是,出于更好理解這個過程的目的,我們來看看如何使用 Scapy 執(zhí)行連接掃描。
為了使用 Scapy 執(zhí)行全連接掃描,你需要一個運行 UDP 網(wǎng)絡(luò)服務(wù)的遠(yuǎn)程服務(wù)器。這個例子中我們使用 Metasploitable2 實例來執(zhí)行任務(wù)。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
此外,這一節(jié)也需要編寫腳本的更多信息,請參考第一章中的“使用文本編輯器*VIM 和 Nano)。
Scapy 中很難執(zhí)行全連接掃描,因為系統(tǒng)內(nèi)核不知道你在 Scapy 中發(fā)送的請求,并且嘗試阻止你和遠(yuǎn)程系統(tǒng)建立完整的三次握手。你可以在 Wireshark 或 tcpdump 中,通過發(fā)送 SYN 請求并嗅探相關(guān)流量來看到這個過程。當(dāng)你接收到來自遠(yuǎn)程系統(tǒng)的 SYN+ACK 響應(yīng)時,Linux 內(nèi)核會攔截它,并將其看做來源不明的響應(yīng),因為它不知道你在 Scapy 中 發(fā)送的請求。并且系統(tǒng)會自動使用 TCP RST 封包來回復(fù),因此會斷開握手過程??紤]下面的例子:
這個 Python 腳本的例子可以用做 POC 來演系統(tǒng)破壞三次握手的問題。這個腳本假設(shè)你將帶有開放端口活動系統(tǒng)作為目標(biāo)。因此,假設(shè) SYN+ACK 回復(fù)會作為初始 SYN 請求的響應(yīng)而返回。即使發(fā)送了最后的 ACK 回復(fù),完成了握手,RST 封包也會阻止連接建立。我們可以通過觀察封包發(fā)送和接受來進(jìn)一步演示。
在這個 Python 腳本中,每個發(fā)送的封包都在傳輸之前展示,并且每個收到的封包都在到達(dá)之后展示。在檢驗每個封包所激活的 TCP 標(biāo)識的過程中,我們可以看到,三次握手失敗了??紤]由腳本生成的下列輸出:
在腳本的輸出中,我們看到了四個封包。第一個封包是發(fā)送的 SYN 請求,第二個封包時接收到的 SYN+ACK 回復(fù),第三個封包時發(fā)送的 ACK 回復(fù),之后接收到了 RST 封包,它是最后的 ACK 回復(fù)的響應(yīng)。最后一個封包表明,在建立連接時出現(xiàn)了問題。Scapy 中可能能夠建立完成的三次握手,但是它需要對本地 IP 表做一些調(diào)整。尤其是,如果你去掉發(fā)往遠(yuǎn)程系統(tǒng)的 TSR 封包,你就可以完成握手。通過使用 IP 表建立過濾機(jī)制,我們可以去掉 RST 封包來完成三次握手,而不會干擾到整個系統(tǒng)(這個配置出于功能上的原理并不推薦)。為了展示完整三次握手的成功建立,我們使用 Netcat 建立 TCP 監(jiān)聽服務(wù)。之后嘗試使用 Scapy 連接開放的端口。
這個例子中,我們在 TCP 端口 4444 開啟了監(jiān)聽服務(wù)。我們之后可以修改之前的腳本來嘗試連接 端口 4444 上的 Netcat 監(jiān)聽服務(wù)。
這個腳本中,SYN 請求發(fā)送給了監(jiān)聽端口。收到 SYN+ACK 回復(fù)之后,會發(fā)送 ACK回復(fù)。為了驗證連接嘗試被系統(tǒng)生成的 RST 封包打斷,這個腳本應(yīng)該在 Wireshark 啟動之后執(zhí)行,來捕獲請求蓄力。我們使用 Wireshark 的過濾器來隔離連接嘗試序列。所使用的過濾器是 tcp (ip.src == 172.16.36.135 || ip.dst == 172.16.36.135) 。過濾器僅僅用于展示來自或發(fā)往被掃描系統(tǒng)的 TCP 流量。像這樣:
既然我們已經(jīng)精確定位了問題。我們可以建立過濾器,讓我們能夠去除系統(tǒng)生成的 RST 封包。這個過濾器可以通過修改本地 IP 表來建立:
在這個例子中,本地 IP 表的修改去除了所有發(fā)往被掃描主機(jī)的目標(biāo)地址的 TCP RST 封包。 list 選項隨后可以用于查看 IP 表的條目,以及驗證配置已經(jīng)做了修改。為了執(zhí)行另一次連接嘗試,我們需要確保 Natcat 仍舊監(jiān)聽目標(biāo)的 4444 端口,像這樣:
和之前相同的 Python 腳本可以再次使用,同時 WIreshark 會捕獲后臺的流量。使用之前討論的顯示過濾器,我們可以輕易專注于所需的流量。要注意三次握手的所有步驟現(xiàn)在都可以完成,而不會收到系統(tǒng)生成的 RST 封包的打斷,像這樣:
此外,如果我們看一看運行在目標(biāo)系統(tǒng)的 Netcat 服務(wù),我們可以注意到,已經(jīng)建立了連接。這是用于確認(rèn)成功建立連接的進(jìn)一步的證據(jù)。這可以在下面的輸出中看到:
雖然這個練習(xí)對理解和解決 TCP 連接的問題十分有幫助,恢復(fù) IP 表的條目也十分重要。RST 封包 是 TCP 通信的重要組成部分,去除這些響應(yīng)會影響正常的通信功能。洗嘜按的命令可以用于刷新我們的 iptable 規(guī)則,并驗證刷新成功:
就像例子中展示的那樣, flush 選項應(yīng)該用于清楚 IP 表的條目。我們可以多次使用 list 選項來驗證 IP 表的條目已經(jīng)移除了。
執(zhí)行 TCP 連接掃描的同居通過執(zhí)行完整的三次握手,和遠(yuǎn)程系統(tǒng)的所有被掃描端口建立連接。端口的狀態(tài)取決于連接是否成功建立。如果連接建立,端口被認(rèn)為是開放的,如果連接不能成功建立,端口被認(rèn)為是關(guān)閉的。
你下個小軟件,IPSCAN;讓他掃描所有的IP地址; 然后用ARP -a命令;這個網(wǎng)段的所有存活的IP地址和其對應(yīng)的MAC地址就全部列出來了,但僅限于廣播,路由就不行了;也就是說就在這個子網(wǎng)的是可以的
1、linux分區(qū)
--在linux里面所有的設(shè)備、任何東西,在linux看來都是文件。
--文件在它看來,有兩種形式:
第一種是字符型(鍵盤輸入、打印機(jī));
第二種是二進(jìn)制型(硬盤、光驅(qū)、U盤)
--linux中所有硬件
--手動分區(qū)
--A、至少有兩個分區(qū)
/ 根分區(qū)
SWAP 交換分區(qū)(物理內(nèi)存大小的兩倍)
--B、個人桌面分區(qū)
/
/boot 128MB is enough
/usr
SWAP
/tmp(用于光盤刻錄)
2、linux目錄說明
--/dev/xxyN
--xx (分區(qū)所在設(shè)備類型:hd--IDE硬盤 sd--SCSI硬盤)
--y (標(biāo)明分區(qū)所在設(shè)備
例如:/dev/hda 第一個IDE硬盤 或 /dev/hdb 第二個IDE硬盤 或 /dev/sdb 第二個SCSI硬盤)
--N (數(shù)字代表分區(qū):1-4--主分區(qū)或擴(kuò)展分區(qū);邏輯分區(qū)從5開始!
例如:/dev/hda3 第一個IDE硬盤上的第三個主分區(qū)或擴(kuò)展分區(qū)
/dev/sdb6 第二個SCSI硬盤上的第二個邏輯分區(qū))
3、linux目錄結(jié)構(gòu)
/ 根目錄,最高級別
/bin 系統(tǒng)基本命令存放目錄(/usr/bin)
/boot linux的內(nèi)核及引導(dǎo)系統(tǒng)程序文件存放目錄(如:vmlinuz、initrd.img)
一般情況下,GRUB或LILO系統(tǒng)引導(dǎo)管理也位于這個目錄
/dev 設(shè)備文件存儲目錄,如聲卡、光驅(qū)...
/ect 存放系統(tǒng)設(shè)置文件(如用戶賬號密碼、服務(wù)器配置文件等)
/home 普通用戶家目錄,默認(rèn)存放目錄
/lib 庫文件存放目錄
/lost+found 在ext2或ext3文件系統(tǒng)中,當(dāng)系統(tǒng)以外崩潰或機(jī)器意外關(guān)機(jī),而產(chǎn)生一些文件碎片放在這里。
當(dāng)系統(tǒng)啟動的過程中,fsck工具會檢查這里,并修復(fù)已經(jīng)損壞的文件系統(tǒng)。
有事喜用發(fā)生問題,有很多的文件被移到這個目錄中,可能會用手工的方式來修復(fù),或者移文件到原來的位置上。
/media 即插即用型存儲設(shè)備的掛載點自動在這個目錄下創(chuàng)建。
如USB盤系統(tǒng)自動掛在后,會在這個目錄下產(chǎn)生一個目錄;
類似cdrom的目錄
/mnt 存放掛載存儲設(shè)備的掛載目錄,如cdrom等目錄
/opt 表示可選的意思,有些軟件包也會被安裝在此,也就是自定義軟件包,
比如OpenOffice,或者一些我們自己編譯的軟件包,也可安裝此處。
/proc 操作系統(tǒng)運行時,進(jìn)程(正在運行的程序)信息及內(nèi)核信息(比如CPU、硬盤分區(qū)、內(nèi)存信息等)存放在此。
/proc目錄是偽裝的文件系統(tǒng)proc的掛載目錄,proc并不是真正的文件系統(tǒng)
/root linux超級權(quán)限用戶root的家目錄
/sbin 大多是涉及系統(tǒng)管理的命令的存放,只有超級權(quán)限用戶root才可執(zhí)行命令存放,普通用戶無權(quán)限執(zhí)行此目錄下的命令
與 /usr/sbin; /usr/X11R6/sbin; usr/local/sbin 目錄相似
(sbin,只有root權(quán)限才能執(zhí)行)
/tmp 臨時文件目錄,有時用戶運行程序的時候,會產(chǎn)生臨時文件。
/var/tmp目錄和此目錄相似
/usr 系統(tǒng)存放程序的目錄,如命令、幫助文件等。這個目錄下有很多的文件和目錄。
大部分Linux發(fā)行版提供的軟件包都安裝在此,涉及服務(wù)器的配置文件就安裝在/ect中。
/usr/share/fonts 字體目錄
/usr/share/man 或 /usr/share/doc 幫助目錄
/usr/bin 或 /usr/local/bin 或 /usr/X11R6/bin 普通用戶可執(zhí)行文件目錄
/usr/sbin 或 /usr/local/sbin 或 /usr/X11R6/sbin 超級權(quán)限用戶root可執(zhí)行命令存放目錄
/usr/include 程序頭文件存放目錄
/var (vary)此目錄經(jīng)常變動
/var/log 用來存放系統(tǒng)日志
/var/www 用來定義Apache服務(wù)器站點存放
/var/lib 用來存放一些庫文件,如MySQL的,以及MySQL數(shù)據(jù)庫的存放地。
4、基本命令
--查看幫助 *** --help *** --?
--查看詳細(xì)幫助 man ***
--登錄 login
--退出窗口 exit
--關(guān)機(jī) shutdown
--重啟 reboot
--初始化 init (run level -/etc/inittab),0-6看第六部分的g
--進(jìn)入根目錄 cd /
--回上層目錄 cd ..
--相對路徑 cd dev
--絕對路徑 cd /dev
--查用戶名 whoami
--查當(dāng)前目錄 pwd
--列出當(dāng)前目錄內(nèi)容 ls
-l(樹詳細(xì)顯示目錄內(nèi)容)
-m(橫列顯示目錄內(nèi)容,是屏幕長度顯示)
-a(列出全部文件,包括隱藏文件)
-S(以文檔大小排序)
--創(chuàng)建目錄 mkdir dname
--刪除目錄 rmdir dname
rm -r *** -(遞歸刪除該目錄下所有內(nèi)容,詢問每個準(zhǔn)備刪除的文件)
rm -rf ***-(強(qiáng)制刪除該目錄下所有內(nèi)容,不詢問)
--創(chuàng)建空白文件 touch ***
(ps:從技術(shù)的角度來講,linux的文件后綴名沒有任何意義)
--復(fù)制 cp
cp -r **1 **2 (復(fù)制1到2中)
--移動 mv
mv -t **1 **2 (把2移動到1中)
--編輯文本 vi [文件名]
--查看文本 cat 由第一行開始顯示文本內(nèi)容
tac 從最后一行顯示,可以看出 tac 是 cat 的倒著寫
more 一頁一頁的顯示文檔內(nèi)容
less 與 more 類似,可以往前翻頁
head 只看頭幾行
-N(數(shù)字,可根據(jù)行數(shù)顯示)
tail 只看后幾行
-N(數(shù)字,可根據(jù)行數(shù)顯示)
nl 顯示的時候,順序輸出行號
od 以二進(jìn)制位的方式讀取檔案內(nèi)容
--查找文本 find [路徑][查找類型][搜索文件名]
如查找rc.local find /etc -name *.local
--查找命令信息及其位置 whereis 命令
如 whereis ls
--查看環(huán)境變量 echo $SHELL
如 echo $PATH (分大小寫:分隔符是:,windows是echo %path%;)
--鏈接 ln
如 ln joe.txt a (硬鏈接,如同復(fù)制一個新文件,joe.txt刪除后,a還存在)
a是鏈接的名稱,a和joe.txt同步,然后a的內(nèi)容和joe.txt一樣
joe.txt改變,a也跟著變
如 ln -s joe.txt b (軟鏈接,如同創(chuàng)建一個快捷方式,joe.txt刪除后,b不存在)
--wc 統(tǒng)計指定文本文件的行數(shù)、字?jǐn)?shù)、字符數(shù)
--grep(很常用) 在指定的文本文件中查找指定的字符串
grep 字符串 文件名
--col 見管道..
--------------------
----信息顯示命令----
--------------------
--date 顯示和設(shè)置日期
--stat 顯示指定文件的相關(guān)信息
--who、w 顯示在線登錄用戶
--whoami 顯示用戶自己的身份
--id 顯示當(dāng)前用戶的id信息
--hostname 顯示主機(jī)名稱
--uname 顯示操作系統(tǒng)信息
--dmesg 顯示系統(tǒng)啟動信息
--du 顯示指定的文件(目錄)已使用的磁盤空間
--df 顯示文件系統(tǒng)磁盤空間的使用情況
--free 顯示當(dāng)前內(nèi)存和交換空間的使用情況
--fdisk -l 顯示磁盤信息
--locale 顯示當(dāng)前語言環(huán)境
5、掛載點(mount 設(shè)備目錄 掛載目錄)
--訪問設(shè)備 (那設(shè)備當(dāng)成一個文件,和另外一個文件夾進(jìn)行綁定)
--例如掛載光驅(qū):步驟 [cd /mnt]---[mkdir cdr]---[mount /dev/cdrom /mnt/cdr]---[cd cdr]--OK!直接訪問光驅(qū)內(nèi)容
--卸載掛載設(shè)備(umount /dev/cdrom)--注意必須先退出掛載目錄,否則出現(xiàn)"device is busy"錯誤.
6、startup-shutdown(linux啟動流程)
--A、boot sequence(important) linux啟動過程
a. load bios(hardware information)
b. read MBR's config to find out the OS
(MBR--Master Boot Record,硬盤第一個物理扇區(qū),柱面0、磁頭0、扇區(qū)1,包含主引導(dǎo)程序和硬盤分區(qū)表)
c. load the kernel of the OS
(加載為kernel核心的OS)
d. init process starts...
(啟動linux第一個進(jìn)程init)
e. execute /etc/rc.d/sysinit
(執(zhí)行系統(tǒng)最重要的配置文件,后臺啟用進(jìn)程)
(rc.d--run command)
f. start other modules(stc/modules.conf)
(開啟各種模塊,如內(nèi)存管理模塊、硬盤管理模塊)
g. execute the run level scripts
(系統(tǒng)啟動是分層次的,根據(jù)情況執(zhí)行,每個層次之間沒關(guān)系)
0 - 系統(tǒng)停機(jī)狀態(tài)
1 - 單用戶工作狀態(tài) root
2 - 多用戶狀態(tài)(沒有NFS)
3 - 多用戶狀態(tài)(有NFS)
NFS - Network File System 網(wǎng)絡(luò)文件系統(tǒng),聯(lián)網(wǎng)系統(tǒng)
4 - 系統(tǒng)未使用,留給用戶
5 - 圖形界面
6 - 系統(tǒng)正常關(guān)閉并重新啟動
如:cd /etc -- 有rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d等多個文件夾,保存著各個層次執(zhí)行的進(jìn)程文件
h. execute /etc/rc.d/rc.local (重要)
(保存其它進(jìn)程腳本,如tomcat自動啟動,要修改此配置文件)
i. execute /bin/login
(登錄界面)
j. shell started...
7、vi 文本編輯器
--兩種模式:命令模式 編輯模式
--vi [文件名]
(切換到編輯模式)
a append-光標(biāo)后添加
i insert-光標(biāo)前插入
o open-另起一行編輯
esc (切換回命令模式)
:w 存盤
:wq 存盤退出
:q 退出
:q! 不存盤退出
dd 刪除其中一行
dw 刪除一個單詞
(sudo gedit 文本 常用linux下的文本編輯器,比vi好用)
8、用戶設(shè)置
--切換用戶(switch user) su username
小技巧:直接exit切換
--添加用戶 useradd username [-g] [組名](分配到某個用戶組)
(創(chuàng)建后會自動在/home目錄下創(chuàng)建該新用戶的文件夾,如/home/username)
--設(shè)置密碼 passwd username
--cd /etc
--查看用戶信息 more password
如新增的用戶信息:username:x:500:500::/home/username:/bin/bash
第一個數(shù)字,代表用戶組,當(dāng)添加用戶沒有指定用戶組時,系統(tǒng)會創(chuàng)建一個和用戶ID一樣的組ID;
第二個數(shù)字:用戶ID號;
用戶的目錄是/home/username;
用戶的SHELL是/bin/bash
(命令---SHELL[解釋命令]---kenrel內(nèi)核)
SHELL有多種類型,如csh、bash(常用)、bsh、ksh、sh(最原始)
--添加用戶組 groupadd groupname
--查看用戶組信息 more group
--刪除用戶組 groupdel groupname
--修改用戶 usermod [-g] [組名] [用戶名]
--刪除用戶 userdel username
然后把/home的文件夾刪除了 rm -rf 文件夾
9、權(quán)限file privilege
--linux把文件的權(quán)限分成四種:r:read w:write x:execute -:none
如:-rw-r--r--
lrwxrwxrwx
drwxr-xr-x
drwxr-xr-x
第一個數(shù)字'-'代表文件,其余是文件夾,后9位分為3組,每組有四種權(quán)限設(shè)置rwx-
第一位表示文件所有者
第二位表示和所有者在同一用戶組的用戶
第三位表示不在同一用戶組的用戶權(quán)限
--設(shè)置權(quán)限 (隨意應(yīng)用,靈活組合!)
1、普通用法
--添加權(quán)限 [chmod +x 文件]
如:-rw-r--r-- --- -rwxr-xr-x
--刪除權(quán)限 [chmod -x 文件]
如:-rwxr-xr-x --- -rw-r--r--
--給自己添加權(quán)限 [chmod ?+x 文件]
如此類推,組--g,其他人--o
如:chmod u+x -rw-r--r-- --- -rwxr--r--
chmod g+x -rw-r--r-- --- -rw-r-xr--
chmod o+x -rw-r--r-- --- -rw-r--r-x
2、專業(yè)用法 chmod 755/777
--原理,八進(jìn)制轉(zhuǎn)二進(jìn)制
如755,111 101 101, rwx r-x r-x
777,111 111 111, rwx rwx rwx
--修改所有者權(quán)限 chown (change owner)
如:chown 原來文件 file1 的所有者是 root,改成joe的
chown joe file1
10、管道(把上一個命令執(zhí)行的結(jié)果交給下一個命令)
--使用方法:
命令1|命令2|命令3......|命令n
--使用舉例
--$ls -Rl /etc | more
(如 ls -Rl /etc (在控制臺模式下,無法返回前面過去的信息),因此需要管道執(zhí)行該查詢,實現(xiàn)分頁的工作, ls -Rl /etc | more)
--$cat /etc/passwd | wc
(顯示文件結(jié)果,再數(shù)數(shù)有多少行)
--$cat /etc/passwd | grep lrj
(顯示文件結(jié)果,再查找包含lrj的行)
--#dmesg | grep eth0
(顯示系統(tǒng)啟動的信息,再查找包含eth0的行--真正含義,檢查網(wǎng)卡執(zhí)行信息是否正常)
--$man bash | col -b bash.txt
語法:col [-bfx][-l緩沖區(qū)列數(shù)]
補(bǔ)充說明:在許多UNIX說明文件里,都有RLF控制字符。當(dāng)我們運用shell特殊字符""和"",把說明文件的內(nèi)容輸出成純文本文件時,控制字符會變成亂碼,col指令則能有效濾除這些控制字符。
參數(shù):
-b 過濾掉所有的控制字符,包括RLF和HRLF。
-f 濾除RLF字符,但允許將HRLF字符呈現(xiàn)出來。
-x 以多個空格字符來表示跳格字符。
-l緩沖區(qū)列數(shù) 預(yù)設(shè)的內(nèi)存緩沖區(qū)有128列,您可以自行指定緩沖區(qū)的大小。
--$ls -l | grep "^d"
(用正則表達(dá)式篩選出目錄列表中 頭字母為'd' 的內(nèi)容--目錄)(^是正則表達(dá)式開頭部分)
--$ls -l * | grep "^-" | wc -l
(列出目錄列表中 頭字符為'-'的內(nèi)容--文件,并統(tǒng)計顯示的行數(shù)wc -l)
11、其他命令
--wall(warning all) 通知所有人
a.命令替換
如 wall `date`、 cd 'pwd'、mkbootdisk $(uname -r)
b.重定向
重定向輸出:
如 ls cmd.txt ,把文件寫到cmd.txt,不輸出在控制臺
ls cmd.txt ,把文件追加寫到cmd.txt
重定向輸入:
如 wall cmd.txt,把文本內(nèi)容發(fā)給所有人
12、修改系統(tǒng)的默認(rèn)系統(tǒng)級別
常用3和5
3 - 多用戶狀態(tài)(有NFS)
NFS - Network File System 網(wǎng)絡(luò)文件系統(tǒng),聯(lián)網(wǎng)系統(tǒng)
5 - 圖形界面
PS.設(shè)置用戶權(quán)限: sudo chmod 777 目錄
4表示讀,2表示寫,1表示執(zhí)行.
第一位表示文件所有者,第二位表示和所有者在同一用戶組的用戶,第三位表示不在同一用戶組的用戶權(quán)限.
755表示文件所有者可讀寫,執(zhí)行.
第二位5表示與所有者在同一用戶組的可讀,可執(zhí)行,不可寫.
第三位5表示其它組可讀,可執(zhí)行,不可寫. 轉(zhuǎn)載于Joewalker在本人空間也有詳細(xì)說明