手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:gbk

巧用VMware虚拟机NAT端口映射使外网访问虚拟机

以下内容只针对vmware(我只在Server上试过),不知道其他软件怎么样。
遇到的问题是这样的,有朋友的虚拟机出了点问题,想让我帮忙看看,可是如果通过 QQ远程连上去,再打开虚拟机会很卡,所以想到,是否可以让我直接SSH连接上,但因为虚拟机是NAT方式的连接,即IP是私有的,无法直接连上,找了些资料,发现NAT端口映射可以搞定。

以下是资料介绍:原文来自:http://www.linuxso.com/linuxrumen/141.html

  NAT中隐藏的端口映射,说明一下环境,利用当然是VMnet8网络连接,在虚拟机中架设win2003的WEB服务器利用WEB默认80端 口,IP为192.168.10.4,真实主机winxp系统有两个IP,内网连接192.168.10.1,外网上IP为 221.196.193.220。外网其他计算机,可以通过访问我的真实主机221.196.193.220,访问到win2003的WEB。

  首先说下原理,因为WEB服务是利用80端口,所以在Win2003上建立了WEB服务,80也就自动被打开,因为Win03是内网 ip(192.168.10.4),外网无法通过访问这个地址,找到我的web服务,但是可以通过外网地址(221.196.193.220)访问我的 XP系统,XP又能连接到Win2003,所以把80映射到我的Winxp的系统上是有可能的!

  那么废话了,现在说实际操作,打开--编辑--虚拟网络设置--NAT选项卡,如下图:

大小: 36.98 K
尺寸: 500 x 375
浏览: 2529 次
点击打开新窗口浏览全图

选择编辑,打开NAT设置,这里保持默认就可以,如果你对你自己的网络很熟悉,可以更改网关等项目

大小: 33.66 K
尺寸: 336 x 376
浏览: 2378 次
点击打开新窗口浏览全图

直接打开端口转递,这里就是NAT的端口映射配置了,用实例的WEB服务举例,因为WEB属TCP连接,所以在TCP和UDP上我都做了,转换,点击添加

大小: 18.16 K
尺寸: 422 x 158
浏览: 2169 次
点击打开新窗口浏览全图

主机端口,填入真实主机要被转换的端口,这里我用FTP又举了个例子,在真实的主机上1021上建立了FTP服务,这样访问时就需要ip后加:,如ftp://192.168.1.1:1021便可正常访问了,这里因为我的XP上没有web服务所以主机端口添的依旧是80.

  虚拟机IP地址,填入内网虚拟机的IP,这个是Win2003的IP,服务端口,对应那个服务就填入哪个端口,你可以参考其他文章,常用端口.

  描述,无所谓了,写个自己能看懂的就行,不些也没问题啊~

  这样一来,你的朋友就可以在IE下输入http://221.196.193.220/ 访问到你虚拟机中Win2003下的WEB服务了,什么?还不可以?自己访问成功可是其他人都不行?

  呵呵,不要急,如果你是WINXP SP2的系统,去看看你的防火墙设置吧,添加端口,不用我说了吧,安全起见,把TCP和UDP都加到例外中,就ok了~

  PS:1、在虚拟机里配置好IIS和动态域名解析软件

  2、如果你的主机处于内网中,请在路由器上设置端口映射,如果主机直接连接互联网,可以忽略此步骤。

-------

嗯,我是作了22端口映射,然后ssh主机的IP,果然能够连上,这下子操作起来访问很多了。

 

Tags: vmware

drupal的db_query安全过滤

这篇 文章已经是07年的了,不过,我一直没有关注过drupal的db类,所以对于这方面我也根本 就没有在意过。8过,我在我的siterpc中,我也是采用了sprintf的写法,不是为了安全,而是为了格式化。因为在siterpc里我们几乎不接受外部变量,所有的变量都是由我们自己传入,所以对于安全方便忽略了很多。但还是用sprintf来格式化SQL语句了。

因此看到这篇drupal的db_query安全过滤,突然发现,可以让我的代码少写很多了。(参数可变时请使用vsprintf)

以下是原文 :

Drupal通过C风格的字符串输出格式实现了对sql语句的安全过滤。
使用方法:

PHP代码
  1. db_query("SELECT n.nid FROM {node} n WHERE n.type = '%s'"$type);//正确做法  
  2. //这不等于以下语句,使用sprintf并不能避免mysql注入。  
  3. db_query(sprintf("SELECT n.nid FROM {node} n WHERE n.type = '%s'"$type)); //不正确  
drupal db_query核心代码如下:
PHP代码
  1. /** 
  2.  * Indicates the place holders that should be replaced in _db_query_callback(). 
  3.  */  
  4. define('DB_QUERY_REGEXP''/(%d|%s|%%|%f|%b)/');  
  5.   
  6. /** 
  7.  * Runs a basic query in the active database. 
  8.  * 
  9.  * User-supplied arguments to the query should be passed in as separate 
  10.  * parameters so that they can be properly escaped to avoid SQL injection 
  11.  * attacks. 
  12.  * 
  13.  * @param $query 
  14.  *   A string containing an SQL query. 
  15.  * @param ... 
  16.  *   A variable number of arguments which are substituted into the query 
  17.  *   using printf() syntax. Instead of a variable number of query arguments, 
  18.  *   you may also pass a single array containing the query arguments. 
  19.  
  20.  *   Valid %-modifiers are: %s, %d, %f, %b (binary data, do not enclose 
  21.  *   in '') and %%. 
  22.  * 
  23.  *   NOTE: using this syntax will cast NULL and FALSE values to decimal 0, 
  24.  *   and TRUE values to decimal 1. 
  25.  * 
  26.  * @return 
  27.  *   A database query result resource, or FALSE if the query was not 
  28.  *   executed correctly. 
  29.  */  
  30. function db_query($query) {  
  31.   $args = func_get_args();  
  32.   array_shift($args);  
  33.   $query = db_prefix_tables($query);  
  34.   if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax  
  35.     $args = $args[0];  
  36.   }  
  37.   _db_query_callback($args, TRUE);  
  38.   $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback'$query);  
  39.   return _db_query($query);  
  40. }  
  41.   
  42. /** 
  43.  * Helper function for db_query(). 
  44.  */  
  45. function _db_query_callback($match$init = FALSE) {  
  46.   static $args = NULL;  
  47.   if ($init) {  
  48.     $args = $match;  
  49.     return;  
  50.   }  
  51.   
  52.   switch ($match[1]) {  
  53.     case '%d'// We must use type casting to int to convert FALSE/NULL/(TRUE?)  
  54.       return (int) array_shift($args); // We don't need db_escape_string as numbers are db-safe  
  55.     case '%s': 
  56.       return db_escape_string(array_shift($args)); 
  57.     case '%%':  
  58.       return '%'; 
  59.     case '%f': 
  60.       return (float) array_shift($args); 
  61.     case '%b': // binary data  
  62.       return db_encode_blob(array_shift($args));  
  63.   }  
  64. }  
简单的对一些输入做了处理。参考: http://drupal.org/node/101496

原文来自于:http://www.luochunhui.com/id/315

Tags: drupal, php, escape_string

项目小结

项目要求写小结,其实我也很奇怪,不过想想这是领导安排的任务,这还是要完成的。

项目从10月份开始,1月1日上线,共经历了整整 三个月,在这三个月内,我深刻贯彻项目小组领导的精神,按照需求根据进度逐步开展代码的编写工作。

在项目初期需求尚未明确的时候,领导给予了我们充分的授权,但这也使得我们在没有人带领下而出现了迷惘。正所谓,大海航行靠舵手,领导在中后期果断的介入了项目,使得我们在迷惘的灰雾里找到方向。

正是由于领导的后期介入,我们在需求分析、系统评估、代码编写、小组协作方面得到了充分的支持,使得项目的进展极其顺利,最终我们在项目上线前一星期完成了编码工作,并留下了一周的充分时间交由测试小组进行测试并进行程序的BUG修复工作。

在这次的项目过程中,我充分学习到了如何进行小组协作,并在小组协作方面有了一定的心得,对于项目的控制、协调也有了一定的了解。在小组协作的时候,PHP与JAVA代码之间的通讯、协议的制定等也有了长足的进步,可以毫不夸张的说,在下次进行协作的时候,小组之间的联调效率可以上升100%左右。

在项目的进行中,也曾因为理念不同以及小组协作方面与领导产生一定的分歧,但由于领导的大度使得这些问题最终都得到了解决。同时为了照顾加班的同志,领导与加班人员共进退,来得最早走的最晚,使得在加班的时候不显得孤独。

通过三个月的项目进程,使得我在代码编写能力、小组协作能力、进度管理经验、需求分析等方面有了极大的提高,迫切希望下一次项目的到来,可以让我在公司能够学到更多的知识。

Tags: 项目, 小结