在linux2.4中自定义uptime(tcp timestamp)
最近发现老有人扫描我的机器,不知道他们想得到什么信息?于是用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天。