Linux基本使用:
一:查看端口,封掉或过滤某个端口,打开某个端口; 抓包软件有哪些?
查看哪些端口被打开:netstat -anp | grep 端口号 或者 netstat -nultp(此处不用加端口号)
封掉或过滤某个端口:iptables -AINPUT -ptcp --dport 端口号 -jDROP
打开端口号:iptables -AINPUT -ptcp --dport 端口号 -jACCEPT
netstat选项:
-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;
-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;
抓包软件
1.Fiddler,基于代理模式的抓包软件,主要用来抓取http https数据包,也支持websocket。
2.wireshark,使用它来进行tcp协议的分析
3.HTTPAnalyzer,一款http抓包软件,Fiddler由于基于代理模式抓包,一些不走系统代理的软件在Fiddler是抓不到的,但是HTTPAnalyzer可以。
4.Charles,工作原理和Fiddler一样,平时用的不多,好像是个收费软件。可以运行在windows、macos和linux。其他的抓包软件还有SmartSniff、httpwatch之类的。
二:如何修改IP地址,网关,DNS,MAC地址;
1, IP地址、子网掩码:
编辑 /etc/sysconfig/network-script/ifcfg-eth0
DEVICE=eth0 BOOTPROTO=static ---静态还是动态 BROADCAST=192.168.1.255
IPADDR=192.168.1.35 ---IP地址
NETMASK=255.255.255.0 ---子网掩码
NETWORK=192.168.1.0 ---网络
ID ONBOOT=yes
2, 网关:
编辑 /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=vmlinux ---主机名
GATEWAY=192.168.1.2 ---网关
3, DNS:
编辑 /etc/resolv.conf
nameserver 61.147.37.1
nameserver 61.177.7.1
4, MAC地址
编辑网卡的配置文件/etc/sysconfig/network-script/ifcfg-eth0
添加上:HWADDR=00:AA:BB:CC:DD:EE
或:
1)首先必须关闭网卡设备,否则会报告系统忙,无法更改。
命令是: /sbin/ifconfig eth0 down
2) 修改MAC地址。
命令是: /sbin/ifconfig eth0 hw ether 00 AA BB CC DD EE
3) 重新启用网卡
命令是: /sbin/ifconfig eth0 up
三:gcc常见编译选项和链接选项
对于GUN编译器而言,程序的编译经历预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly) 和链接(Linking)四个阶段。在预处理阶段,输入C语言源文件(通常为*.c),该阶段主要处理源文件中的#ifdef、 #include和#define命令,并生成中间文件*.i(实际中并不常用);在编译阶段,输入中间文件*.i,编译后生成汇编语言文件*.s;在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o;最后,在链接阶段将输入的机器代码文件*.o(与其它机器代码文件和库文件)汇集成一个二进制可执行代码文件。
gcc常见编译选项:
-o 将源文件预处理、编译、汇编并链接形成可执行文件
[e.g.1]gcc source.c
未指定输出文件时默认输出为a.out
[e.g.2]gcc source.c -o exec
将源文件source.c链接为可执行文件exec
-E 仅作预处理并直接显示,不进行编译、汇编和链接
[e.g.1]gcc -E source.c -o preproc.i
将源文件source.c预处理结果输出到preproc.i文件
[e.g.2]gcc -E source.c > preproc.txt
将source.c预处理结果重定向到preproc.txt文件
注:”gcc -E”也可换为”cpp”(C preprocessor)
-S 预处理和编译到汇编语言(自动生成.s文件),不进行汇编和链接
[e.g.1]gcc -S source.c
将源文件source.c汇编成source.s文件
[e.g.2]gcc -S preproc.i
将预处理输出文件preproc.i汇编成preproc.s文件
-c 仅作预处理、编译和汇编并生成目标文件(与源文件同名但后缀为.o),不进行链接
[e.g.1]gcc -c source.s
将汇编输出文件source.s编译输出source.o文件
[e.g.2]gcc -c source.c -o target.o
编译源文件source.c并将目标文件更名为target.o
-g 产生带调试信息的编译后目标代码,供调试器(如gdb使用)
[e.g.1]gcc -g source.c
将源文件编译为带调试信息的目标文件a.out
-w 禁止显示任何警告信息
-Wall 显示全部警告信息
-Werror 把警告当作错误,出现任何警告就停止
-Wunreachable-code 探测到永不执行的代码时发出警告
–help 显示gcc帮助说明
–version 显示gcc版本号和版权信息
gcc常见链接选项:
-I 选项可以向 GCC 的头文件搜索路径中添加新的目录
eg: gcc foo.c -I /home/justin/include -o foo
-L 选项向 GCC 的库文件搜索路径中添加新的目录
eg: 如果在 /home/xiaowp/lib/ 目录下有链接时所需要的库文件 libfoo.so ,为了让 GCC 能够顺利地找到它,可以使用下面的命令:
gcc foo.c -L /home/justin/lib -lfoo -o foo
Linux 下的库文件分为两大类分别是动态链接库(通常以.so 结尾)和静态链接库(通常以.a 结尾),两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的 。默认情况下,GCC 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static 选项,强制使用静态链接库。例如,如果在home/justin/lib/ 目录下有链接时所需要的库文件libfoo.so 和libfoo.a ,为了让GCC 在链接时只用到静态链接库,可以使用下面的命令:
gcc foo.c -L /home/justin/lib -static -lfoo -o foo
四:gdb调试器
1.1 设置断点
设置断点可以通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。
查看断点,通过info break查看断点列表。
删除断点通过命令包括:
delete <断点id>:删除指定断点
delete:删除所有断点
clear
clear 函数名
clear 行号
clear 文件名:行号
clear 文件名:函数名
1.2 运行
“gdb 命令”之后,run可以在gdb下运行命令;如果命令需要参数则跟在run之后。
1.3 显示栈帧
如果遇到断点而暂停执行,或者coredump可以显示栈帧。
通过bt可以显示栈帧,bt full可以显示局部变量。
1.4 显示变量
“print 变量”可以显示变量内容。
如果需要一行监控多个变量,可以通过p {var1, var2, var3}。
如果要跟踪自动显示,可以使用display {var1, var2, var3}
1.5 显示寄存器
info reg可以显示寄存器内容。
1.6 单步执行
单步执行有两个命令next和step,两者的区别是next遇到函数不会进入函数内部,step会执行到函数内部。
如果需要逐条汇编指令执行,可以分别使用nexti和stepi。
1.7 继续执行
调试时,使用continue命令继续执行程序。程序遇到断电后再次暂停执行;如果没有断点,就会一直执行到结束。
continue:继续执行
continue 次数:继续执行一定次数。
1.8 监视点
要想找到变量在何处被改变,可以使用watch命令设置监视点watchpoint。
1.9 改变变量的值
“通过set variable <变量>=<表达式>”来修改变量的值。
五:make与makefile关系,makefile是怎样工作的,写个简单的makefile
makefile是一个文件,make是一条命令。他们为大项目而生。
make是依赖于Makefile的,要运行make,当前目录下就必须有Makefile此目录名的文件。make是系统提供的一个可执行程序,make解释Makefile的内容,按程序员的期望完成编译、链接任务。
Makefile是阐述依赖关系和依赖方法的。