请教个实现开机后自动发Email报告IP的问题

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
comtex
帖子: 21
注册时间: 2007-02-03 18:13

请教个实现开机后自动发Email报告IP的问题

#1

帖子 comtex » 2007-02-03 18:54

因为我所处的网络IP不固定,我想让电脑远程启动(重启)后,不需要用户登陆。
自动发送IP到我的信箱myemail@to.com, 以便我能通过SSH远程控制这台电脑。

发送邮件我用了SendEmail这个程序,我写了下面的脚本upip,
放在了\etc\init.d里, chmod +x upip。
这个脚本测试通过,我可以收到相关包含IP的email。

然后执行 sudo update-rc.d upip defaults 自动做启动和关闭的链接.


#!/bin/bash
ifconfig >$filename

sendEmail -f email@from.com \
-t myemail@to.com \
-s server.com \
-o message-file= $filename \
-u "Report of IP"


可能的问题是启动后没有权限生成文件$filename。 我想应该可以把ifconfig结果存为一个变量,
然后直接发送,不存文件,但还不知道如何实现。

为了测试这个脚本是否能直接启动, 我把只发了一封简单的信,
#!/bin/bash

sendEmail -f email@from.com \
-t myemail@to.com \
-s server.com \
-m "test" \
-u "Report of IP"

但是发现启动后也没有自动执行。

请大伙帮忙看看是哪里出了问题。 谢谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2007-02-03 19:10

ifconfig的不能认局域网的外网ip。

代码: 全选

w3m -no-cookie -dump www.ip138.com|grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
可以取得。

保存文件可以指定路径,就不会有权限问题。

既然是email。email的头信息,解析出来也可以直接看到发送的ip吧。

脚本执行,直接加到/etc/rc2.d/里面。加到S40网络启动以后的位置,试试。
● 鸣学
comtex
帖子: 21
注册时间: 2007-02-03 18:13

#3

帖子 comtex » 2007-02-03 19:21

eexpress 写了:ifconfig的不能认局域网的外网ip。

代码: 全选

w3m -no-cookie -dump www.ip138.com|grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
可以取得。

保存文件可以指定路径,就不会有权限问题。



既然是email。email的头信息,解析出来也可以直接看到发送的ip吧。

脚本执行,直接加到/etc/rc2.d/里面。加到S40网络启动以后的位置,试试。
ifconfig我发现没有问题,是可以取得(实)IP的。

我把文件保存为 /tmp/ip.txt 这样可以吗? 启动的时候执行权限是su吗?

似乎最重要的问题还是这个脚本没有执行。
执行 sudo update-rc.d upip defaults 的结果是
Adding system startup for /etc/init.d/upip.sh ...
/etc/rc0.d/K20upip.sh -> ../init.d/upip.sh
/etc/rc1.d/K20upip.sh -> ../init.d/upip.sh
/etc/rc6.d/K20upip.sh -> ../init.d/upip.sh
/etc/rc2.d/S20upip.sh -> ../init.d/upip.sh
/etc/rc3.d/S20upip.sh -> ../init.d/upip.sh
/etc/rc4.d/S20upip.sh -> ../init.d/upip.sh
/etc/rc5.d/S20upip.sh -> ../init.d/upip.sh

我改到S40以后再试试。 多谢了。
comtex
帖子: 21
注册时间: 2007-02-03 18:13

#4

帖子 comtex » 2007-02-03 19:38

eexpress 写了: 既然是email。email的头信息,解析出来也可以直接看到发送的ip吧。

脚本执行,直接加到/etc/rc2.d/里面。加到S40网络启动以后的位置,试试。
请问如何如何从email头信息解析出发送ip?

我用了 ln -s /etc/init.d/upip /etc/rc2.d/S95upip,但还没有收到email :(

但查看状态 /etc/init.d/upip status 的时候会执行这个脚本。
头像
Jackay
帖子: 78
注册时间: 2006-11-29 14:25
联系:

#5

帖子 Jackay » 2007-02-03 22:01

请问如何如何从email头信息解析出发送ip?

我用了 ln -s /etc/init.d/upip /etc/rc2.d/S95upip,但还没有收到email :(

但查看状态 /etc/init.d/upip status 的时候会执行这个脚本。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#6

帖子 eexpress » 2007-02-03 23:06

email导出成mbs等格式。反正是文本的了。不过只能看到发送的服务器ip。还是你把ip加到邮件算了。
Received: from www.3322.org (unknown [61.177.95.125])
by mx7 (Coremail) with SMTP id wKjAO7D7L9YmiaNFQ9p8Lw==.16860S2;
Tue, 09 Jan 2007 20:23:02 +0800 (CST)
● 鸣学
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

#7

帖子 jarlyyn » 2007-02-04 3:52

用花生壳之类的不好吗?
comtex
帖子: 21
注册时间: 2007-02-03 18:13

#8

帖子 comtex » 2007-02-04 10:25

eexpress 写了: 脚本执行,直接加到/etc/rc2.d/里面。加到S40网络启动以后的位置,试试。
我把以前的链接都删除了,然后 ln -s /etc/init.d/upip /etc/rc2.d/S95upip,
现在可以生成所需要的文件,但是没有发送email, 请问可能是什么问题?
或者有没有更好的办法实现这个功能?
多谢!
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#9

帖子 5451vs5451 » 2007-02-04 15:00

如果你的ip经常变的话,最好把ipup放到crontab里去,而不是仅开机的时候执行一次。
comtex 写了:或者有没有更好的办法实现这个功能?
多谢!
可以用ekiga啊,系统默认就装好了。再装个sipsak(只有147k)就能发消息了。
比如,在内网的机器上运行:

代码: 全选

~$ sipsak -s sip:85451@ekiga.net -M -B "hello"
warning: ignoring -i option when in usrloc mode
timeout after 500 ms
biggest delay between request and response was 942.169 ms
1 time(s) the timeout of 500 ms exceeded and request was retransmitted.
在ekiga下就可以收到这条消息(见下图)。我是在本机上运行sipsak的,所以后面的地址是127.0.0.1,不然的话应该可以看到公网ip的。
附件
Screenshot-Chat Window.png
comtex
帖子: 21
注册时间: 2007-02-03 18:13

#10

帖子 comtex » 2007-02-06 8:41

5451vs5451 写了:如果你的ip经常变的话,最好把ipup放到crontab里去,而不是仅开机的时候执行一次。
comtex 写了:或者有没有更好的办法实现这个功能?
多谢!
可以用ekiga啊,系统默认就装好了。再装个sipsak(只有147k)就能发消息了。
比如,在内网的机器上运行:

代码: 全选

~$ sipsak -s sip:85451@ekiga.net -M -B "hello"
warning: ignoring -i option when in usrloc mode
timeout after 500 ms
biggest delay between request and response was 942.169 ms
1 time(s) the timeout of 500 ms exceeded and request was retransmitted.
在ekiga下就可以收到这条消息(见下图)。我是在本机上运行sipsak的,所以后面的地址是127.0.0.1,不然的话应该可以看到公网ip的。
我的IP是每次开机的时候才有可能变,是不是就不用放到crontab了?

看起来ekiga不错,多谢多谢!

之前的email没有发送成功问题是因为我把sendEmail装在自己的账号下,启动的时候似乎没有权限执行,或者是找不到, 我重新装在了/usr/local/bin/sendEmail ,并指定了路径就可以了。在同事的帮助下,我又把原来的方法改了一下,不用存文件,直接从ipconfig的结果中提取并发送ip信息。完整脚本如下:

#!/bin/bash

ipinfo=`/sbin/ifconfig | grep 'inet addr:'| grep -v '127.0.0.1 ' | cut -d: -f2 | awk '{ print $1}'`
#echo $ipinfo

/usr/local/bin/sendEmail -f name@send.com \
-t name@to.com \
-s mailserver\
-u "Report of my IP:"$ipinfo
-m "anything"
weixibupt
帖子: 4
注册时间: 2010-10-16 10:27

Re: 请教个实现开机后自动发Email报告IP的问题

#11

帖子 weixibupt » 2011-10-11 15:57

comtex 写了:
5451vs5451 写了:如果你的ip经常变的话,最好把ipup放到crontab里去,而不是仅开机的时候执行一次。
comtex 写了:或者有没有更好的办法实现这个功能?
多谢!
可以用ekiga啊,系统默认就装好了。再装个sipsak(只有147k)就能发消息了。
比如,在内网的机器上运行:

代码: 全选

~$ sipsak -s sip:85451@ekiga.net -M -B "hello"
warning: ignoring -i option when in usrloc mode
timeout after 500 ms
biggest delay between request and response was 942.169 ms
1 time(s) the timeout of 500 ms exceeded and request was retransmitted.
在ekiga下就可以收到这条消息(见下图)。我是在本机上运行sipsak的,所以后面的地址是127.0.0.1,不然的话应该可以看到公网ip的。
我的IP是每次开机的时候才有可能变,是不是就不用放到crontab了?

看起来ekiga不错,多谢多谢!

之前的email没有发送成功问题是因为我把sendEmail装在自己的账号下,启动的时候似乎没有权限执行,或者是找不到, 我重新装在了/usr/local/bin/sendEmail ,并指定了路径就可以了。在同事的帮助下,我又把原来的方法改了一下,不用存文件,直接从ipconfig的结果中提取并发送ip信息。完整脚本如下:

#!/bin/bash

ipinfo=`/sbin/ifconfig | grep 'inet addr:'| grep -v '127.0.0.1 ' | cut -d: -f2 | awk '{ print $1}'`
#echo $ipinfo

/usr/local/bin/sendEmail -f <!-- e --><a href="mailto:name@send.com">name@send.com</a><!-- e --> \
-t <!-- e --><a href="mailto:name@to.com">name@to.com</a><!-- e --> \
-s mailserver\
-u "Report of my IP:"$ipinfo
-m "anything"
我主脚本实现是先用ifconfig获取ip信息存在一文件下,再用sendmail程序发邮件。具体把主脚本链接放在rc2.d的S99级别上,sendmail脚本在/usr/local/bin/下, 临时文件存在/tmp/下。
问题1. ifconfig获取到的信息没有实际ip的信息,如下:

eth0 Link encap:Ethernet HWaddr 00:23:5a:6d:df:02
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:17
而进入系统后才会有实际的ip, 这是什么原因呢,难道网络配置在rc2.d之后才进行?

问题2. sendmail 并没有工作, 我猜想是没有实际的ip所以邮件发送失败

ps: 系统是10.04版本
回复