要看你使用的linux版本。 如果是debian系列的,一般可以直接 sudo apt-get install?erlang來(lái)進(jìn)行安裝。 如果是redhat系列,一般需要下載源碼進(jìn)行安裝,也可yum list | grep?erlang?看看軟件源里有沒(méi)有
創(chuàng)新互聯(lián)專注于黑龍江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。黑龍江網(wǎng)站建設(shè)公司,為黑龍江等地區(qū)提供建站服務(wù)。全流程按需定制開(kāi)發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
用tcpdum命令可以抓指定IP的包,具體命令為:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.1 -w ./target.cap
參數(shù)解析:
tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項(xiàng)等都要放到第一個(gè)參數(shù)的位置,用來(lái)過(guò)濾數(shù)據(jù)報(bào)的類型。
-i eth1 : 只抓經(jīng)過(guò)接口eth1的包
-t : 不顯示時(shí)間戳
-s 0 : 抓取數(shù)據(jù)包時(shí)默認(rèn)抓取長(zhǎng)度為68字節(jié)。加上-S 0 后可以抓到完整的數(shù)據(jù)包
-c 100 : 只抓取100個(gè)數(shù)據(jù)包
dst port? 22 : 抓取目標(biāo)端口是22的數(shù)據(jù)包
src net 192.168.1.0/24 : 數(shù)據(jù)包的源網(wǎng)絡(luò)地址為192.168.1.1
-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
擴(kuò)展資料
tcpdump語(yǔ)法格式:
tcpdump [-adeflnNOpqStvx][-c數(shù)據(jù)包數(shù)目][-dd][-ddd][-F表達(dá)文件][-i網(wǎng)絡(luò)界面][-r數(shù)據(jù)包文件][-s數(shù)據(jù)包大小][-tt][-T數(shù)據(jù)包類型][-vv][-w數(shù)據(jù)包文件][輸出數(shù)據(jù)欄位]
tcpdump主要參數(shù)說(shuō)明:
1、-a 嘗試將網(wǎng)絡(luò)和廣播地址轉(zhuǎn)換成名稱。
2、-c數(shù)據(jù)包數(shù)目 收到指定的數(shù)據(jù)包數(shù)目后,就停止進(jìn)行傾倒操作。
3、-d 把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標(biāo)準(zhǔn)輸出。
4、-dd 把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成C語(yǔ)言的格式,并傾倒到標(biāo)準(zhǔn)輸出。
5、-ddd 把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成十進(jìn)制數(shù)字的格式,并傾倒到標(biāo)準(zhǔn)輸出。
6、-e 在每列傾倒資料上顯示連接層級(jí)的文件頭。
7、-f 用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址。
8、-F表達(dá)文件 指定內(nèi)含表達(dá)方式的文件。
9、-i網(wǎng)絡(luò)界面 使用指定的網(wǎng)絡(luò)截面送出數(shù)據(jù)包。
10、-l 使用標(biāo)準(zhǔn)輸出列的緩沖區(qū)。
11、-n 不把主機(jī)的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字。
12、-N 不列出域名。
這里的是CentOs操作系統(tǒng)下的安裝,其他操作可以借鑒這篇文章查看如何安裝,具體步驟如下:
安裝GCC ?yum install gcc
安裝ncurses-devel yum install ncurses-devel
1.訪問(wèn)官網(wǎng)下載頁(yè)找到適合自己機(jī)器運(yùn)行的版本;
2.將Erlang下載到本地
wget
3.解壓并安裝
tar -zxvf otp_src_19.2.tar.gz
cd otp_src_19.2
./configure
make amp;amp; make install
4.注意,這里是使用默認(rèn)的路徑進(jìn)行安裝,如有需要可以自行更改,安裝完后輸入“erl”以下提示即為安裝成功:
[root@cloud bin]# erl
Erlang R16B02 (erts-5.10.3) [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.3(abort with ^G)
1gt;
Windows
在Windows下開(kāi)發(fā)Erlang程序,erl文件一多的時(shí)候,希望可以一個(gè)命令編譯所有的erl文件,于是嘗試使用:
E:\workspace\Mangixerlc -o ebin src\*.erl
報(bào)錯(cuò):
e:/WORKSP~1/Mangix/src/*.erl:none: I/O error
在網(wǎng)上查了一些資料,發(fā)現(xiàn)可以這樣:
FOR %f in (src\*.erl) DO erlc -W -o ebin "%f"
Linux
在Linux下,可以直接這樣:
root@compute0:~/Mangix# erlc -o ebin src/*.erl
linux下編譯運(yùn)行驅(qū)動(dòng)
嵌入式linux下設(shè)備驅(qū)動(dòng)的運(yùn)行和linux x86 pc下運(yùn)行設(shè)備驅(qū)動(dòng)是類似的,由于手頭沒(méi)有嵌入式linux設(shè)備,先在vmware上的linux上學(xué)習(xí)驅(qū)動(dòng)開(kāi)發(fā)。
按照如下方法就可以成功編譯出hello world模塊驅(qū)動(dòng)。
1、首先確定本機(jī)linux版本
怎么查看Linux的內(nèi)核kernel版本?
'uname'是Linux/unix系統(tǒng)中用來(lái)查看系統(tǒng)信息的命令,適用于所有Linux發(fā)行版。配合使用'uname'參數(shù)可以查看當(dāng)前服務(wù)器內(nèi)核運(yùn)行的各個(gè)狀態(tài)。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux
只打印內(nèi)核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic
要打印系統(tǒng)的體系架構(gòu)類型,即的機(jī)器是32位還是64位,使用:
#uname -p
i686
/proc/version 文件也包含系統(tǒng)內(nèi)核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012
發(fā)現(xiàn)自己的機(jī)器linux版本是:3.5.0-19-generic
2、下載機(jī)器內(nèi)核對(duì)應(yīng)linux源碼
到下面網(wǎng)站可以下載各個(gè)版本linux源碼
如我的機(jī)器3.5.0版本源碼下載地址為:
下載完后,找一個(gè)路徑解壓,如我解壓到/linux-3.5/
然后很重要的一步是:執(zhí)行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic
。進(jìn)入linux源碼目錄,編輯Makefile,將EXTRAVERSION = 修改為EXTRAVERSION= -19-generic。
這些都是要配置源碼的版本號(hào)與系統(tǒng)版本號(hào),如果源碼版本號(hào)和系統(tǒng)版本號(hào)不一致,在加載模塊的時(shí)候會(huì)出現(xiàn)如下錯(cuò)誤:insmod: error inserting 'hello.ko': -1 Invalid module format。
原因很明確:編譯時(shí)用的hello.ko的kenerl 不是我的pc的kenerl版本。
執(zhí)行命令cp /boot/config-3.5.0-19-generic ./config,覆蓋原有配置文件。
進(jìn)入linux源碼目錄,執(zhí)行make menuconfig配置內(nèi)核,執(zhí)行make編譯內(nèi)核。
3、寫一個(gè)最簡(jiǎn)單的linux驅(qū)動(dòng)代碼hello.c
/*======================================================================
Asimple kernel module: "hello world"
======================================================================*/
#include linux/init.h
#include linux/module.h
MODULE_LICENSE("zeroboundaryBSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO"Hello World enter\n");
return0;
}
static void hello_exit(void)
{
printk(KERN_INFO"Hello World exit\n ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("zeroboundary");
MODULE_DESCRIPTION("A simple HelloWorld Module");
MODULE_ALIAS("a simplestmodule");
4、寫一個(gè)Makefile對(duì)源碼進(jìn)行編譯
KERN_DIR = /linux-3.5
all:
make-C $(KERN_DIR) M=`pwd` modules
clean:
make-C $(KERN_DIR) M=`pwd` clean
obj-m += hello.o
5、模塊加載卸載測(cè)試
insmod hello.ko
rmmod hello.ko
然后dmesg|tail就可以看見(jiàn)結(jié)果了
最后,再次編譯驅(qū)動(dòng)程序hello.c得到hello.ko。執(zhí)行insmod ./hello.ko,即可正確insert模塊。
使用insmod hello.ko 將該Module加入內(nèi)核中。在這里需要注意的是要用 su 命令切換到root用戶,否則會(huì)顯示如下的錯(cuò)誤:insmod: error inserting 'hello.ko': -1 Operation not permitted
內(nèi)核模塊版本信息的命令為modinfo hello.ko
通過(guò)lsmod命令可以查看驅(qū)動(dòng)是否成功加載到內(nèi)核中
通過(guò)insmod命令加載剛編譯成功的time.ko模塊后,似乎系統(tǒng)沒(méi)有反應(yīng),也沒(méi)看到打印信息。而事實(shí)上,內(nèi)核模塊的打印信息一般不會(huì)打印在終端上。驅(qū)動(dòng)的打印都在內(nèi)核日志中,我們可以使用dmesg命令查看內(nèi)核日志信息。dmesg|tail
可能還會(huì)遇到這種問(wèn)題insmod: error inserting 'hello.ko': -1 Invalid module format
用dmesg|tail查看內(nèi)核日志詳細(xì)錯(cuò)誤
disagrees about version of symbolmodule_layout,詳細(xì)看這里。
在X86上我的辦法是:
make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD modules