分析了443个免费代理 其中只有21%没有黑幕 那么剩下的79%呢

我的web服务-Proxy Checker现在正式上线了!你可以使用它来测试代理服务器的安全性。源代码将会在稍后公布出来。

由于我于2013年所发表的文章《为什么免费的代理会是免费的?》在Reddit网上收到了广泛的好评,所以我决定我将继续发表一篇相关文章。这一次,我将会尝试寻找一种使用了我在文章中所描述技术的代理服务。

所以,我写了一个非常简易的脚本(实际上是一个php函数),这个脚本会从不同的地方调用各种Javascript脚本文件,并且通过这些文件来检查修改过的内容。

如果你对代码不感兴趣,你可以跳转至扫描部分。

我所说的“非常简易”,是真的非常简易,因为下面的代码就是整个函数:

function scanProxy($proxy,$url,$socks=true,$timeout=10) { 
$ch = curl_init($url); 
$headers["User-Agent"] = "Proxyscanner/1.0"; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 0); //we don't need headers in our output 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,$timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return output as string 
$proxytype = ($socks?CURLPROXY_SOCKS5:CURLPROXY_HTTP); //socks or http proxy? 
if($proxy) { 
curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_PROXYTYPE, $proxytype); 
} 
$out = curl_exec($ch); 
curl_close($ch); 
return trim($out); 
}

如果你需要查看我在扫描时所使用的完整脚本文件,你可以点击这里获取。我没有为大家提供一个代理服务的列表,但是获得这样的一个列表并不是什么难事。

我最近正在开发一个开源的web端服务,该服务名为Proxy Check,它正是基于这个函数而开发的。在网站上,你可以测试你在网上所找到的代理。我计划过几天将这个服务上线。

如果需要测试代理服务,你仅仅需要将代理的文件/脚本/图片/页面等数据的URL地址递交上去,然后它将会把测试数据返回给你。

下面是一个简单的使用示例:

//requesting a JS file from this blog 
$proxy_data=scanProxy('127.0.0.1:9050','https://blog.haschek.at/js/blog.js'); 
//requesting reference data so we can check if something is altered 
$reference_data=scanProxy(false,'https://blog.haschek.at/js/blog.js'); 
if(($proxy_data!=$reference_data) && $reference_data) //if the data is different but the proxy has sent something 
echo "[!] Proxy modified the content!\n"; 
else if(!$reference_data) 
echo "[-] Proxy is down\n"; 
else 
echo "[+] Proxy did not modify the content\n";

 

你可以通过使用这个函数,来完成各种各样的分析和测试

  • 你可以通过访问网站http://ip.haschek.at来查看代理是否隐藏了你的IP地址,该网站会显示出你的IP地址,并且你可以通过查询相关参考数据来确定这个IP地址是否与你的公共IP地址相同。
  • 检查代理是否使用了HTTPS隧道通信。如果没有使用,那么可能是因为服务器的所有者只需要得到明文信息,以便于他们从你的通信信息中提取出相关的数据。
  • 检测代理是否向静态网站中添加了任何的数据信息(例如:广告)

让我们来对443个免费代理进行检测

我从各种地方收集到了大量的代理,但我通过Google搜索发现,所有的这些代理都指向了某些固定站点。

我们到底需要检测什么?

  • 是否允许使用HTTPS?
  • JS脚本是否被修改?
  • 静态网站页面内容是否被修改?
  • 代理会隐藏我的IP地址吗?

检测结果

测试                               结果

测试数量                       443(100%)

线上                              199(44.9%)

线下                              244(55.1%)

未使用HTTPS              157(79%)

JS文件被修改              17(8.5%)

HTML页面被修改         33(16.6%)

没有隐藏IP地址           0(0%)

网页内容没有修改      149(75%)

所以,75%的代理都是安全的,对吗?

代理没有修改你的数据内容,并不意味着它就是安全的。如果你想要安全地使用一个免费代理,唯一的方法就是使用支持HTTPS的代理,并且只访问强制使用HTTPS的网站。但是,目前仅有21%的代理支持HTTPS通信。

结果

网上免费的代理服务器往往是离线的,这并不令人惊讶,但是我并不希望这么多的代理服务器都将HTTPS通信禁止了。他们禁止HTTPS通信是有原因的,因为他们想要用户去使用HTTP进行通信,这样他们便可以分析你的通讯信息,并且窃取你的登录信息了。

在上述的199(8.5%)个代理里面,仅有17个代理修改了JS脚本,而且其中大多数的代理是为了向客户页面注入广告。但是其中有两个网站的修改信息却是错误数据或者网页过滤器的警告信息。

有33个代理服务器(16.6%)修改了静态HTML网页信息并且 注入了广告。其中,大多数的代理服务器在脚本结束标签之前注入了下列的代码:

<link rel="stylesheet" type="text/css" href="http://ads.adt100.com/css/bottom.css" /><div id="center_xad" class="cwindow_xad"><div class="center_title_xad" id="center_title_xad"><img onclick="closeWindow()" width="39px" id="cwindow_xclose" height="11px" src="http://ads.adt100.com/images/close_btn.gif"></div><div id="center_xad_cnt" class="injection_content"></div></div><div id="right_xad" class="window_xad"><div class="right_title_xad" id="right_title_xad"><img onclick="closeWindow()" id="cwindow_rclose" width="39px" height="11px" src="http://ads.adt100.com/images/close_btn.gif"></div><div id="right_xad_cnt" class="injection_content"></div></div><script src="http://ads.adt100.com/js/bottom.js"></script>

这绝对是恶意广告软件,而且还有可能会导致cookie被窃取。我并没有对这些代码进行进一步的研究,但是如果你想要对它们进行研究,那么当你有任何发现的时候,请你告知我。

其他代理服务的广告注入则显得更加的隐蔽。他们在页面头部插入了一个脚本标签,如下所示:

<script type="text/javascript" charset="utf-8" mediaproAccountID="0" mediaproSlotID="0" usermac="" src="/7b26d4601fbe440b35e496a0fcfa15f7/00212600d7e6/w1/i.js" async="async" defer></script><meta charset="utf-8">

在这里,有趣的事情就是这些代码看似指向一个本地的JS脚本文件。当浏览器通过代理请求调用这个文件的时候,代理会劫持这个请求,并且以受感染的JS文件进行回应。正如其他的链接一样,这并不是一个跨域JS链接,这样做非常的聪明。

如果你依旧认为你必须使用这些免费的代理服务,那么请你尝试使用支持HTTPS通信的代理服务,并且尽量只浏览那些安全性能够得到保障的网站。

分析了443个免费代理 其中只有21%没有黑幕 那么剩下的79%呢,首发于博客 – 伯乐在线

在树莓派上的XBMC增加一个静音按钮(mute button for XBMC on Raspberry Pi)

也许有人会问有了手机控制或者红外控制为什么还要有一个物理的静音按钮呢?设想一下以下场景:

当你在电视上看大片看得正爽的时候,来了个电话,是到手机上找app来控制呢,还是手忙脚乱的找遥控器来静音,或者直接到电视机边上按个静音键方便呢?

正是因为如此,才有了这个创意。

基本思路:一个简单的轻触式按钮连接到Pi的gpio口,在Pi上运行一个python程序,当按钮按下时,给XBMC发送静音指令。

附加功能:每按一次,LED闪一下

扩展功能:不满足于静音功能的,还可以多增加几个按钮来完成其他的功能,比如播放、暂停、快进、发送邮件、甚至求救报警功能。

开始动手

原料:

树莓派 1个(这个你肯定有了吧,没有就入一个吧)

轻触式按钮 1个

LED 1个

3k3电阻 2个

洞洞板、连接线、面包板之类,看自己情况使用。

步骤1:

焊洞洞板,示意电路图如下:

dianlu

 

为了防止LED以及GPIO口电流太大,加了限流电阻。

board1

实际焊接图,请忽略左边五个按钮和左边的电阻,这是我留着备用的。

按照电路图连接到Pi上。

步骤2,安装python的gpio库,如果已经安装了,请跳过此步

cd /tmp
cd gpio
wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.7.tar.gz
tar xvzf RPi.GPIO-*.tar.gz
cd RPi.GPIO-*/
sudo python setup.py install
如果安装的时候出现错误:
source/py_gpio.c:23:20: fatal error: Python.h: No such file or directory
这是因为缺少Python.h文件,没安装python编译环境:
sudo apt-get install python-dev
步骤3:开始我们的python程序吧
#!/user/bin/env python

import RPi.GPIO as GPIO
import time
import urllib
import urllib2
import json

def mute():
url=’http://你的Pi的ip地址:8080/jsonrpc’
values = {“jsonrpc”:”2.0″,”method”:”Application.SetMute”,”id”:1,”params”:{“mute”:”toggle”}}

jdata = json.dumps(values)
req = urllib2.Request(url, jdata)
req.add_header(‘Content-Type’,’application/json’)
response = urllib2.urlopen(req)
return response.read()

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.IN)
while True:
in_value= GPIO.input(12)
if in_value ==False:
mute();
GPIO.output(11,False)
time.sleep(0.5)
GPIO.output(11,True)
while in_value == False:
in_value = GPIO.input(12)

然后运行python key.py,按下按钮看看屏幕右上角已经有了静音标志了?再按一下,又消失了。
还可以在这个代码基础上修改做别的操作,希望这个能够起到抛砖引玉的作用。

[转]汉字简化十大错,你知道吗?

十【使汉字的可识别性大大降低】

汉字简化以後,使原来差别很大的字变得非常相像,导致经常被人搞错。

如:鳳(凤)和風(风)厲(厉)和歷(历)

特别是“凤”

九【有些字笔画本不多,完全没必要简化】

如:減(减)涼(凉)於(于)時(时)國(国)

八【简化后出现表音错误】

如:鄰(邻)賓(宾)

韵母本是in,但简化字是用韵母为ing的字作偏旁,容易让人读错。

七【毫无道理地将汉字进行切割,音形皆损】

如:掛(挂)蠍(蝎)槨(椁)櫬(榇)

六【同音字合并,字义混乱】

汉字本来是有精确分工的,非要人为地让一个字去承担本不该它应该具有的含义。如:

后:前后皇后原本为前後皇后

发:发现头发原本为發現頭髮

面:面部面粉原本为面部麵粉

板:木板老板原本为木板老闆

五【合并偏旁,字不达意】

像“貓(猫)和“豬(猪)”简化以后都成了狗类了,实在是太滑稽了。

四【形体笔画比较丑陋】

许多汉字原来是非常方正美观的,简化以后字形变得极为难看。如:

讠(言)钅(金)车(車)龙(龍)汉(漢)

刘(劉)华(華)长(長)拣(揀)东(東)

三【割裂了整个汉字体系】

许多汉字是自成体系的,常用字简化后割裂了与非常用字的联系,致使从小学简化字的人一辈子也记不住一些使用频率较低的字。如:会写 “扑(撲)” 不会写 “璞”和“蹼”,会写 “还(還)”和“环(環)”不会写 “寰”和“鬟”。其他还有:

仅(僅)谨瑾盘(盤)磐牺(犧)曦

彻(徹)澈撤蜡(蠟)猎(獵)鬣

歼(殲)纤(纖)谶伤(傷)殇(殤)觞(觴)

声(聲)馨磬罄梦(夢)懵甍

二【无理简化,莫名其妙】

许多汉字的部首被毫无道理地用“又”字和叉代替,使优美的汉字变得不伦不类,莫名其妙。如:

鳳(凤)風(风)漢(汉)僅(仅)難(难)

權(权)歡(欢)聖(圣)對(对)樹(树)

一【失去了表音功能】

许多汉字原来是形声字,简化后失去了表音功能,而这正是汉字有别于其他文化的特点。如:

際(际)價(价)標(标)僅(仅)歡(欢)

隊(队)屬(属)劉(刘)燭(烛)敵(敌)

 

原文地址:http://toutiao.com/a4506608589/

[翻译]通过树莓派发送短信Send SMS Messages from Raspberry Pi

本站首发,转载请注明作者及引用网址

原文地址:

https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=69286&sid=89b99af621144e400c588b4ef6cad708

 

写这篇文章背景故事很简单。我有一个树莓派,花了35刀的一个超小的arm计算机。我用它运行Nagios来监控我的服务器(因为过段时间我要出去旅行)。我希望当我的服务器有警报信息的时候,它会给我发一条短信,而我实在不原意在花钱买个SMS网关,太奢侈了,实际上email就可以了,但我更喜欢短信。然后我就开始找解决方案。

我在githut上找到一个允许我通过简单的python脚本来发送短信,地址是https://github.com/korylprince/pygvoicelib。下面的步骤将讲述如何如何通过pi来发送短信。步骤1:确保你的PI已经安装了系统并且有internet连接
步骤2:注册一个google voice帐号,这里需要一个gmail的帐号。
步骤3:在你的google帐号里面允许2步验证,地址是https://accounts.google.com/b/0/IssuedAuthSubTokens

步骤4:创建一个指定应用的密码,打开https://accounts.google.com/b/0/IssuedAuthSubTokens,移到最下面,在name框里填上Raspberry Pi(或者任何你想要的名字来标示你的设备),然后点击生成密码。
你将会得到一个一次性的密码

步骤5:登陆到你的Pi打开命令行或者通过putty连接到SSH

然后进入到你的home目录,比如我的是/home/pi

cd /home/pi

步骤6: 从github克隆所有代码

首先运行下面的指令来阻止ssl错误

export GIT_SSL_NO_VERIFY=1

然后运行下面的指令来克隆

 

git clone https://github.com/korylprince/pygvoicelib.git

步骤7:让Pi得到google的授权

cd到刚创建的pygvoicelib目录
运行以下指令:

python get_auth.py

将会提示你输入你gmail帐号和你在第四步得到的的应用的密码。在你输入这些信息以后,你会看到很多参数显示在终端上。记住以下参数,你在后面的步骤里将会用到
username
apppass
auth_token
rnr_se

步骤8:创建一个脚本来发送短信

运行下面的指令,你也可以用nano来编辑

vi text.py

将下列的代码贴到你创建的文件里面

#!/usr/bin/python
import pygvoicelib
number = raw_input(‘number:’)
txtmsg = raw_input(‘message:’)
client = pygvoicelib.GoogleVoice(username,apppass,auth_token,rnr_se)
client.sms(number,txtmsg)

用你在第7步创建的的username,apppass,auth_token,和rnr_se来替换这个文件中的参数
示例Example:

#!/usr/bin/python
import pygvoicelib
number = raw_input(‘number:’)
txtmsg = raw_input(‘message:’)
client = pygvoicelib.GoogleVoice(‘name@gmail.com’,'asdfahrwsthjtrh’,’4k3EozF_Qmrg3tD2_m56nQtFHCVSaTdUxb7HvcaN6g3PV929VH0eH4GGVOVpbVK2O6EaGFzMDYA6PhPjaEHr0ZGjO1GQN3RGhQLXqePWfglbXnA2n7XpUophOk5qztQyv2fYM7eYgtVCYeO6txTqbDQAAANsAAABZ7d0GTL2pJsUauPkH4Z3cpbJFqjfLZYfhok1b11pIMDnEOypZgIcOVdPEt8jEMx7oY9hHJeJoDQZYndDJDu8uoDbDWgxl87GMy990snKWR8iy8VIB17769eVWboa3224U8DLZLUWMpP0d4hfsDK5MQ’,'L6tph126BjmNjDcfTZGaWYeb+sk=’)
client.sms(number,txtmsg)

步骤9:发送短信

运行以下的指令

python text.py

它将提示你输入电话号码以及短信内容

步骤10:庆祝,打开一瓶啤酒然后好好的享受吧。

我另外也在我的blog写了这个操作步骤:http://citycorpse.com

精彩回复:

by default_user8 » Wed Feb 12, 2014 7:10 pm
Try sms via email key
here is a list by provider
Provider Format
Sprint phonenumber@messaging.sprintpcs.com
Verizon phonenumber@vtext.com
T-Mobile phonenumber@tmomail.net
AT&T phonenumber@txt.att.net
AIM +1phonenumber
by drgeoff » Thu Feb 13, 2014 10:16 am
DougieLawson wrote:I don’t think using Google Voice to send SMS messages is available outside the US & Canada. 我觉得这个除了美国和加拿大以外的地方都用不了

For 99% of the population of USA and Canada, that is the whole world. :lol:

对于美国和加拿大的99%人口来说,这就是整个世界了。
老美的傲慢和自豪感觉得他们的世界就是整个世界了,当然也是调侃的语气啦,至少人家分享的精神就很好。
至于说google voice不能在天朝用的问题,只能通过翻墙来解决了。可以在手机上装一个google voice的客户端,接受推送还是可以的。另外一个解决方案就是用飞信了,注册以后,发送邮件到13xxx@139.com,就可以收到短信了,完全免费哦,不过只能发送到移动号码,电信和联通的貌似也有类似功能,但是没有用过,可以试验一下。

超大 Cookie 拒绝服务攻击

有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况?

不多说,马上来试验一下:

for (i = 0; i < 20; i++)
    document.cookie = i + '=' + 'X'.repeat(2000)

什么,网站居然报错了?

众所周知,Cookie 是塞在请求头里的。如果 Cookie 太多,显然整个 HTTP 头也会被撑大。

然而现实中,几乎所有的服务器都会对请求头长度做限制,避免畸形封包消耗服务器资源。

那么有趣的事就来了 —— Cookie 是可以长期储存的,所以只要不过期,对应的站点就一直无法访问!

不信?点击这里试试 (警告:不会清 Cookie 的用户慎点

为什么会这样!因为博客园是支持自定义装扮的,用户可以嵌入自己的脚本。于是,一旦执行了恶作剧脚本,站点 Cookie 被污染,导致整个网站都无法访问了!

进阶

根据这个原理,我们继续挖掘 Cookie 的相关属性,让攻击效果变得更好。

expires

Cookie 之所以能被持久储存,完全得益于 expires 这个过期值。

理论上,Cookie 的过期时间可以足够长。不过鉴于实际情况,最多也就几个月的时间。

但对于互联网来说,这也非常长了,谁能容忍一个网站几个月没法用?

所以,我们可以设置足够久的过期时间 —— 只要用户不主动清空 Cookie,相应的站点就一直没法访问!


domain

例如博客园,所有用户都在 www.cnblogs.com 下。除了这个主站,能否将其他的子站服务也一起破坏呢?

答案是可以!因为 Cookie 具有一个特殊的属性 domain,它允许子站设置上级站点的 Cookie。甚至可以是根域!

于是 www.cnblogs.com 的页面,就能写入超大 Cookie 到 cnblogs.com 域下了。

未来,只要用户访问 *.cnblogs.com 的资源,统统变成 400 了。

这个特征可被利用到 XSS 攻击上。只要某网站任何一个子站能够运行跨站脚本,攻击者就可以对该网站进行全站屏蔽了!(GFW:比我还狠~)


path

不过太霸道也是不好的。尤其是这年头大家都懂些网络知识,清缓存这样简单的事,不少小白用户都会尝试下。

所以,为了低调起见,我们不对页面进行屏蔽,以免被过早被用户发现。

我们只屏蔽特殊的 URL,例如 AJAX 请求接口。这样,页面仍能正常打开,只是后期的一些操作总是提示失败 —— 于是,用户大多会认为是网站出问题了,而不会怀疑是自己的原因。

为了能更精确的控制 Cookie 粒度,path 属性得利用起来。例如,我们只污染博客园的 /mvc/vote/VoteComment.aspx 页面:

for (i = 0; i < 20; i++) {
	document.cookie = i + '=' + 'X'.repeat(2000) + ';domain=cnblogs.com; path=/mvc/vote/VoteComment.aspx'

这样,页面仍能正常浏览,只是把『点赞』功能给屏蔽了:

是不是很有趣:)

这种局部屏蔽的效果,显然有更好的迷惑性。


协议

仔细回顾一遍 Cookie 属性,除了 secure,再没和 URL Scheme 相关的属性了。

这意味着,HTTP 和 HTTPS 的 Cookie 默认都是共享的。因此,我们可以在 HTTP 下屏蔽 HTTPS 站点了!

不过 XSS 也不是也想有就能有的,但在特殊的条件下,任何站点都可以有 XSS —— 那就是流量被劫持的时候。

当用户流量被劫持时,中间人可以模拟出任何 HTTP 站点,因此就能对任意站点设置 Cookie:

当用户打开任意 HTTP 页面时,往其中注入脚本。接着悄悄创建目标站点的隐藏框架页,中间人返回特定的页面内容,其中的脚本即可修改目标站点 Cookie 了。

下面就来尝试一下吧。

通过代理,我们模拟流量被劫持的场景。当打开任意页面时,开始对目标站点释放 DeBuff:

主页面的实现:

目标框架页实现:

通过一堆框架页,即可批量对目标站点的 Cookie 进行修改。

最后,切换回正常网络 —— 发现邪恶光环仍在生效:

更杯具的是,连加密传输的 HTTPS 站点也未能幸免:

中间人缓存攻击,又多了一种新玩法!

用途

或许你要说了,这除了恶作剧恶搞之外,有实际意义吗。

不过,只要充分发挥想象,还是能玩出一些有趣的效果。例如配合 XSS:

  • 屏蔽资料修改页面,阻止用户改密码
  • 屏蔽注销接口,保持用户会话不过期
  • 屏蔽管理后台,让管理员暂时无法操作(XSS 盲打时,对管理员造成眩晕效果,持续时间视管理员 IQ 而定)

或者流量劫持的场合:

  • 屏蔽前端检测脚本,降低用户安全性
  • 屏蔽程序、补丁的更新站点,等等

小结

当然,这种所谓的『拒绝服务』,只是本地自欺欺人而已,对真实服务器并没什么影响。

虽然效果不及传统攻击,但这种方式显得更文明一些。只对部分人、甚至部分功能实施攻击,而完全不妨碍其他用户。

超大 Cookie 拒绝服务攻击,首发于博客 – 伯乐在线

钗头凤·红酥手

钗头凤·红酥手
朝代:宋代
作者:陆游

红酥手,黄縢酒,满城春色宫墙柳。东风恶,欢情薄。一怀愁绪,几年离索。错、错、错。
春如旧,人空瘦,泪痕红浥鲛绡透。桃花落,闲池阁。山盟虽在,锦书难托。莫、莫、莫!

钗头凤 唐氏
世情薄,人情恶,雨送黄昏花易落;晓风干,泪痕残,欲笺心事,独语斜栏,难!难!难!
人成各,今非昨,病魂常似秋千索;角声寒,夜阑珊,怕人询问,咽泪装欢,瞒!瞒!瞒!

 

历史背景
陆游的原配夫人是同郡唐姓士族的一个大家闺秀唐氏(有人说唐氏即陆游的表妹唐琬)。结婚以后,他们“伉俪相得”,“琴瑟甚和”,是一对情投意和的恩爱夫妻。不料,作为婚姻包办人之一的陆母却对儿媳产生了厌恶感,逼迫陆游休弃唐氏。

在陆游百般劝谏、哀求而无效的情况下,二人终于被迫分离,唐氏改嫁“同郡宗子”赵士程,彼此之间也就音讯全无了。几年以后的一个春日,陆游在家乡山阴(今浙江省绍兴市)城南禹迹寺附近的沈园,与偕夫同游的唐氏邂逅相遇。唐氏安排酒肴,聊表对陆游的抚慰之情。陆游见人感事,心中感触很深,遂乘醉吟赋这首词,信笔题于园壁之上。

果真是情深不寿,归去后唐氏不久就忧郁而死,留下陆游怅叹一生、追忆一生。在唐氏逝去四十年后的时候,陆游重游故园,挥笔和泪作《沈园》诗:

(其一)

城上斜阳画角哀,

沈园非复旧池台。

伤心桥下春波绿,

曾是惊鸿照影来。

(其二)

梦断香消四十年,

沈园柳老不吹绵。

此身行作稽山土,

犹吊遗踪一泫然!

到八十一岁时,这位孤独老人,还梦回沈园,写下:“城南小陌又逢春,只见梅花不见人。”直到离世前一年,陆游再度重游沈园,怀念唐氏,此情至死。

陆游一生以梅自喻,然而城南小陌的那株梅花难道不是他情系一生的唐氏吗?她心如日月、情比金坚,似一朵高洁的白梅,为情而落。这朵白梅,就落在陆游的心里,从此不再寂寞开无主,不再黄昏独自愁。就这样,为了一段承诺,他活到百发苍苍,只为守护那株清冷、冰洁的梅花。

参见:卜算子 咏梅

驿外断桥边,寂寞开无主。已是黄昏独自愁,更著风和雨。

无意苦争春,一任群芳妒。零落成泥碾作尘,只有香如故。