最近发现老有人扫描我的机器,不知道他们想得到什么信息?于是用nmap -O localhost扫描了一下自己的机器,无意间看到uptime只有1天 -_-//,于是决定改一下系统,让uptime扫描出来更长一些 :p

我使用的kernel是 Linux 2.4.21,更改过程如下:

编辑 /usr/src/linux/net/ipv4/tcp_output.c 中的第1115行(函数tcp_make_synack中),将:
代码:

TCP_SKB_CB(skb)->when = tcp_time_stamp;

改为:
代码:

TCP_SKB_CB(skb)->when = tcp_time_stamp + (sysctl_tcp_updates * 86400 * 100);

这里sysctl_tcp_updates是我们将要定义的一个变量,用来更改uptime值。

编辑 /usr/src/linux/net/ipv4/sysctl_net_ipv4.c,在:
代码:

#include <net/tcp.h>

后加上:
代码:

#define NET_IPV4_TCP_UPDATES 32

再编辑 122行,在:
代码:

ctl_table ipv4_table[] = {

后加上:
代码:

        {NET_IPV4_TCP_UPDATES, "tcp_updates",
         &sysctl_tcp_updates, sizeof(int), 0644, NULL,
         &proc_dointvec},

上面的代码的作用就是增加: sysctl net.ipv4.tcp_updates 这个值。

重新编译内核,在用新内核引导机器后,执行:

# sysctl net.ipv4.tcp_updates

将得到:

net.ipv4.tcp_updates = 0

这时扫描一下自己的机器:

# nmap -O localhost

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1595 ports scanned but not shown below are in state: closed)
Port       State       Service
22/tcp     open        ssh
25/tcp     open        smtp
80/tcp     open        http
Remote operating system guess: Linux Kernel 2.4.0 - 2.5.20
Uptime 0.012 days (since Sun Jan 16 14:47:32 2005)

现在来调整机器的updates:

# sysctl -w net.ipv4.tcp_updates=300
# nmap -O localhost

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1595 ports scanned but not shown below are in state: closed)
Port       State       Service
22/tcp     open        ssh
25/tcp     open        smtp
80/tcp     open        http
Remote operating system guess: Linux Kernel 2.4.0 - 2.5.20
Uptime 300.014 days (since Sun Jan 16 14:47:32 2005)

呵呵,现在nmap扫描出来的uptime已经是300多天了,现在你只要将你的net.ipv4.tcp_updates设置一值,就可以改变你的uptime了,不过因为tcp中的timestamp值为32位,2 ^ 32 / 86400 /100 = 497,所以最多也只能设置updates为497天。