Intelligence without ambition is a bird without wings.

2015-02-11
ssh-实现

阅读此文

2015-02-11
openwrt-升级固件的几种方法

说明

  • 固件名称:openwrt-*-upgrade.bin

通过web方式

  • 主机IP设置为与路由器同一网段的,一般为192.168.1.0/24

  • 打开浏览器,登录web管理页面,一般默认为192.168.1.1

  • 选择固件升级即可

通过ssh

阅读此文

2015-02-10
C-复合语句中的局部变量定义问题

在复合语句,如whilefor等定义局部变量,不会造成额外的开销。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
root@long-VirtualBox:/data/Test/c/for循环中定义变量/src# objdump -d -S main.o
main.o: file format elf32-i386


Disassembly of section .text:

00000000 <main>:
#include <stdio.h>


int main(int argc, char* argv[])
{
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 e4 f0 and $0xfffffff0,%esp
6: 83 ec 20 sub $0x20,%esp
int i = 0;
9: c7 44 24 18 00 00 00 movl $0x0,0x18(%esp)
10: 00
for (; i < 10; ++i) {
11: eb 26 jmp 39 <main+0x39>
int j = 1;
13: c7 44 24 1c 01 00 00 movl $0x1,0x1c(%esp) // i的初始化语句
1a: 00
++j;
1b: 83 44 24 1c 01 addl $0x1,0x1c(%esp)
printf("j = %d\n", j);
20: 8b 44 24 1c mov 0x1c(%esp),%eax
24: 89 44 24 04 mov %eax,0x4(%esp)
28: c7 04 24 00 00 00 00 movl $0x0,(%esp)
2f: e8 fc ff ff ff call 30 <main+0x30>


int main(int argc, char* argv[])
{
int i = 0;
for (; i < 10; ++i) {
34: 83 44 24 18 01 addl $0x1,0x18(%esp)
39: 83 7c 24 18 09 cmpl $0x9,0x18(%esp)
3e: 7e d3 jle 13 <main+0x13> // 重复执行初始化语句
int j = 1;
++j;
printf("j = %d\n", j);
}

return 0;
40: b8 00 00 00 00 mov $0x0,%eax
}
45: c9 leave
46: c3 ret

  • 不会造成不停的给i分配空间的操作,因为局部变量都是在编译时刻确定空间的,是通过操作esp来实现的。

  • 但初始化语句i = 0会重复执行!

总结

  • 最好最变量使用的地方,定义变量,最小化作用域

参考

  1. http://stackoverflow.com/questions/982963/is-there-any-overhead-to-declaring-a-variable-within-a-loop-c
  2. http://stackoverflow.com/questions/7959573/declaring-variables-inside-loops-good-practice-or-bad-practice-2-parter
阅读此文

2015-02-10
objdump-常用命令

  • 反汇编,并带源码

    objdump -S OBJECT_FILE

阅读此文

2015-02-10
linux-命令所属包

coreutils

du, groups, mv, date

bintuils

ar, objdump, ld, c++filt, nm, ranlib, strip, readelf, size, 

bridge-utils

brctl,

e2fsprogs

mkfs.ext2, mkfs.ext3, mkfs.ext4,

dosfstools

mkfs.fat, mkfs.msdos, mkfs.vfat

ntfs-3g

mkfs.ntfs

procps

free, ps, top, sysctl, kill

sysvinit-utils

service, pidof

tar

tar

util-linux

fdisk, cfdisk

所用查找命令

ubuntu

  1. 查看命令完整文件名

    which COMMAND
    
  2. 查看命令所属包

    apt-file search FILENAME
    
阅读此文

2015-02-10
samba-常用操作

  • 测试配置文件语法

    testparm
    
  • 本地连接测试

    smbclient -L //127.0.0.1
    
  • 连接

    smbclient //localhost/fanny -U chanpin
    
  • 观察连接状态

    smbstatus
    
  • 挂载共享目录

    mount -t cifs //127.0.0.1/read /mnt
    
  • 查看用户

    pdbedit -L
    
  • 添加一个用户

    pdbedit -a -u USERNAME
    
  • 删除用户

    pdbedit -x -u USERNAME
    
  • 修改samba用户登录密码

    smbpasswd USERNAME
    
  • 重启samba

    • system-v4

      service smbd restart
      
    • systemd

      systemctl restart smb
      
  • 查看samba版本

    smbstatus
    
阅读此文

2015-02-10
samba搭建

环境

  • CentOS-7.0.1

  • Samba version 4.1.12

步骤

  • 安装samba

    yum install samba
    
  • 修改配置文件

    cp /etc/samba/smb.conf /etc/samba/smb.conf~
    vi /etc/samba/smb.conf
    
    [global]
    workgroup = WORKGROUP
    netbios name = xianji-server
    server string = Samba Server Version %v
    security = user
    map to guest = Bad Password
    guest account = guest
    unix extensions  = no
    load printers = no
    log file = /var/log/samba/%m.log
    max log size = 50
    encrypt passwords = true
    passdb backend = tdbsam
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    pam password change = yes
    
    [root]
    path = /
    browseable = no
    writable = yes
    wide links = yes
    guest ok = no
    
    [share]
    path = /data/share
    guest ok = yes
    read only = no
    
  • 添加samba用户(需要当前已存在用户名)

    pdbedit -a USERNAME
    

    输入2次密码

  • 关闭SELinux

    setenfore 0
    
  • 防火墙放行(445/tcp)

    firewall-cmd --permanent --add-port=445/tcp
    firewall-cmd --reload
    
  • 重启samba服务

    systemctl restart smb
    systemctl restart nmb
    

权限控制

以用户的所有权限控制(security = user)

根据目录、文件的权限来控制

1
2
3
4
5
6
# 添加用户
useradd <username>
pdbedit -a -u <username>(输入相应密码)

# 修改用户名
smbpasswd <usernmae>

参考

  1. https://wiki.archlinux.org/index.php/Samba_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
阅读此文

2015-02-09
源IP选择

阅读此文

2015-02-09
ping常见错误分析

局域网内,目标不存在或未应答

分析

该数据包未发送,因为在tcp/ip在填充目的MAC,执行ARP请求时,没有得到应答,无法确定目的MAC。

表象

  • windows

    无法访问目标主机
    
  • linux

    Destination Host Unreachable
    

非局域网,目标不存在或未应答

分析

该数据包已发送,由下一跳路由负责转发,而对应的机器不存在或未应答

表象

  • windows

    请求超时
    
  • linux

    -   无输出
    

域名解析失败

表象

  • windows

    Ping 请求找不到主机 a。请检查该名称,然后重试。
    
  • linux

    Ping 请求找不到主机 a。请检查该名称,然后重试。
    
阅读此文

2015-02-09
openwrt-目录组织

  • build_dir/ 用于存放所有解压后的源码,并在当中编译

    • host/ 宿主环境下的编译工具源码

    • toolchain-* 交叉C编译器,C标准库,内核,二进制工具等组件源码

    • target-* 目标系统的软件包源码

  • staging_dir/ 用于存放安装已编译,为了进一步编译软件包,或产生固件镜像

    • host/ 最小化的Linux

    • toolchain-* 最小化的LInux,带有交叉C编译器,用于去编译剩余的固件部分

    • target…/root-ramips/ 最终的固件

参考

  1. http://stackoverflow.com/questions/26030670/openwrt-buildroot-build-dir-and-staging-dir
阅读此文