newbie CGI

Nguyễn Xuân Sơn đã viết:
Môi trường LINUX, có các command sau để láy file:
wget URL ( sẽ save file xuống local account) và lệnh sendmail....
XS
off topic một chút nhé, Sơn wget được, sao không ssh thẳng vào máy ở lab rồi wget trực tiếp luôn có phải nhanh hơn không? (anh không biết telnet có wget được không nhỉ)
Từ máy ở lab về nhà thì chắc không khó khăn gì nữa?


Chao cac bác,
nhan tien hoi ve CGI xin moi nguoi hay cho mot bai tong quan ve cac ngon ngu script duoc khong a. Minh thay loan xi lo len cac loai script: Perl, PhP, Python, Ruby, Java script, VB script...(bo chinh neu minh nham lan). CHo minh hoi tai sao co nhieu the co chu, voi ca cac uu nhuoc diem cua chung, cai nao de dung nhat, cai nao se duoc phat trien trong tuong lai.
:) nhòm sơ qua cái list này cũng đến hơn trăm loại ấy nhỉ, nhiều như là các thứ tiếng trên thế giới :)
Chú Sơn vào đây tham khảo nhé:
http://dmoz.org/Computers/Programming/Languages/

Cái nào càng đơn giản thì càng dễ dùng. tùy vào mục đích sử dụng và ... sự thành thạo của em trong lĩnh vực đó

về lập trình web, có vẻ PHP đang chiếm ưu thế đấy.
 
Chỉnh sửa lần cuối:
cai chính là làm như thế không phải lúc nào cũng được, nhất là nếu cái link nó lủng củng...anh Hà ạ. Em có thể chạy cygwin để nối tới lab rồi lấy báo, nhưng vòng vèo quá. Nếu làm được cái web này thì hay hơn, cực nhanh, mà chả cần đến secure connection (nhiều nơi làm việc không có ssh connection). Ngoai ra còn nhiều lý do khác.
XS
 
Nguyễn Xuân Sơn đã viết:
cai chính là làm như thế không phải lúc nào cũng được, nhất là nếu cái link nó lủng củng...anh Hà ạ. Em có thể chạy cygwin để nối tới lab rồi lấy báo, nhưng vòng vèo quá. Nếu làm được cái web này thì hay hơn, cực nhanh, mà chả cần đến secure connection (nhiều nơi làm việc không có ssh connection). Ngoai ra còn nhiều lý do khác.
XS
tất nhiên lập một trang web làm riêng với mục đích đó cũng có thể được.

Anh không giúp được về lập trình này, chỉ gợi ý một số giải pháp khác cho em thôi.

Một file Putty chỉ có hơn 300K, em copy vào đĩa, hoặc vào đâu cũng được, đến nơi chỉ cần download về và chạy, không cần cài đặt gì cả. Ở đâu (có thể vào mạng) muốn truy cập, chỉ cần vào google search Putty, rồi download về, chạy thoải mái, mà lại chủ động điều khiển trên máy chủ, muốn làm gì thì làm.
Với link phức tạp, cũng chỉ cần copy/paste vào chứ em có phải gõ từng chữ một đâu? Giả sử gửi lệnh qua web cũng vậy.

SSH vào server rồi chạy, thường nhanh hơn là chạy từ web.

ngoài ra còn một cách nữa là cài một quả web interface cho ssh, điều khiển bằng web, như là em ssh đến server. Mấy cái này thì search script có sẵn, mấy chú hackers khoái dùng kiểu này lắm.
 
co cho em lam bi chan cong ssh!
thoi, tap php mot chut. The anh Ha co biet cach gi sendmail bang PhP va retrieve file bang PhP khong?
XS
 
Ca'i ha`m mail ma` em du`ng doa.n tre^n trong PHP script la` du`ng sendmail de? gu?i mail.

Co`n wget, ci' da'y chi? du`ng de? download file tu` no+i kha'c va`o ma'y co' chu+'a chu+o+ng tri`nh wget da'y. Chu' la`m seo co' the^? du`ng de? gu?i file de? ma` gu?i file di d.c. Ngay ca? ne^'u anh di.nh du`ng wget tre^n ma'y anh de? download file da~ attach va`o e-mail thi` anh cu~ng pha?i login va`o e-mail truo'c mo'i bi't link de? ma` download file chu'.

Co`n vu. SSH. No' block port 22 thi` cu~ng chi.u. Tru` phi ne^'u co' chu+o+ng tri`nh ne`o cho phe'p du`ng proxy server de? ke't no'i SSH. Ma` ngay ca? nhu+ the' cu~ng ko cha'c cha'n la` se~ tha`nh co^ng d.c.
 
Ca'i do.an script cho anh, to'i ve` em se~ la`m. Ca'i FreeBSD 5.3 Beta 7, ca`i xong, du`ng 1 nga`y o?n di.nh. De'n hom sau, shutdown pha't no' xo'a he't ~ cu?a mi`nh. To'i pha?i ve` ca`i la.i ma'y da~.
 
Chỉnh sửa lần cuối:
Hi Sơn,

Anh nghĩ nếu được thì cài béng 1 cái proxy trên máy trạm trên trường, rồi config cho browser ở nhà dùng proxy đó thì hơn. Còn nếu muốn làm script thì nên đặt mật khẩu hoặc gì đó cho chắc, chứ ngộ nhỡ có chú nào nghịch ngợm thì mailbox của Sơn chả mấy chốc mà full :)

/Thanh
 
em mù tịt secu. CHo em hỏi làm sao bọn nó dò ra trang web của em được nhỉ?
Tình hình là admin lab cũ cực kỳ nghiêm, mà admin chỗ làm cũng cực kỳ nghiêm cho nên không cài đặt vớ vẩn gì cả, chỗ làm còn nghiêm cấm mội connection ssh ra ngoài.
Thế ạ.
XS
 
Nguyễn Xuân Sơn đã viết:
em mù tịt secu. CHo em hỏi làm sao bọn nó dò ra trang web của em được nhỉ?
Tình hình là admin lab cũ cực kỳ nghiêm, mà admin chỗ làm cũng cực kỳ nghiêm cho nên không cài đặt vớ vẩn gì cả, chỗ làm còn nghiêm cấm mội connection ssh ra ngoài.
Thế ạ.
XS
- admin thì check port connection, rồi check xem trong máy em có những cái gì
- thiên hạ thì :> theo cái link em vừa đưa bên trên chẳng hạn
- hacker thì ... cho scan port/address (?)

Cấm SSH ra ngoài hay SSH vào trong? nếu chỉ cần ssh ra ngoài, thì liên quan gì đâu? em cần ssh từ ngoài vào máy ở lab cơ mà :)


Co`n wget, ci' da'y chi? du`ng de? download file tu` no+i kha'c va`o ma'y co' chu+'a chu+o+ng tri`nh wget da'y. Chu' la`m seo co' the^? du`ng de? gu?i file de? ma` gu?i file di d.c. Ngay ca? ne^'u anh di.nh du`ng wget tre^n ma'y anh de? download file da~ attach va`o e-mail thi` anh cu~ng pha?i login va`o e-mail truo'c mo'i bi't link de? ma` download file chu'.
cái quan trọng là điều khiển từ một máy bên ngoài, vào máy ở labo (trung gian), lấy được data về máy trung gian thôi, chứ từ máy trung gian đó đưa về máy ngoài thì có lẽ thiếu gì cách nhỉ? cách đơn giản nhất là đặt cho một cái link http mà download từ máy trung gian (ở labo về)

như anh Thanh nói ấy, nếu được thì gắn con proxy vào máy ở labo, là tiện nhất :)
 
Chỉnh sửa lần cuối:
Mai Thanh Hà đã viết:
Nguyễn Xuân Sơn đã viết:
em mù tịt secu. CHo em hỏi làm sao bọn nó dò ra trang web của em được nhỉ?
Tình hình là admin lab cũ cực kỳ nghiêm, mà admin chỗ làm cũng cực kỳ nghiêm cho nên không cài đặt vớ vẩn gì cả, chỗ làm còn nghiêm cấm mội connection ssh ra ngoài.
Thế ạ.
XS
- admin thì check port connection, rồi check xem trong máy em có những cái gì
- thiên hạ thì :> theo cái link em vừa đưa bên trên chẳng hạn
- hacker thì ... cho scan port/address (?)

Cấm SSH ra ngoài hay SSH vào trong? nếu chỉ cần ssh ra ngoài, thì liên quan gì đâu? em cần ssh từ ngoài vào máy ở lab cơ mà :)


Co`n wget, ci' da'y chi? du`ng de? download file tu` no+i kha'c va`o ma'y co' chu+'a chu+o+ng tri`nh wget da'y. Chu' la`m seo co' the^? du`ng de? gu?i file de? ma` gu?i file di d.c. Ngay ca? ne^'u anh di.nh du`ng wget tre^n ma'y anh de? download file da~ attach va`o e-mail thi` anh cu~ng pha?i login va`o e-mail truo'c mo'i bi't link de? ma` download file chu'.
cái quan trọng là điều khiển từ một máy bên ngoài, vào máy ở labo (trung gian), lấy được data về máy trung gian thôi, chứ từ máy trung gian đó đưa về máy ngoài thì có lẽ thiếu gì cách nhỉ? cách đơn giản nhất là đặt cho một cái link http mà download từ máy trung gian (ở labo về)

như anh Thanh nói ấy, nếu được thì gắn con proxy vào máy ở labo, là tiện nhất :)
Đấy là đang nói về việc anh Sơn muốn nó gửi bài viết vào mail cho mình rùi download xuống. Nếu gửi vào mail rùi thì cũng bắt buộc phải log in vào hộp mail trước mới bít link mà download xuống được. Vả lại, theo như anh Sơn nói thì cái máy ở chỗ làm nó block SSH ---> ko kết nối đến trường mà download được --> phải dùng proxy trên 1 trong số các cổng cho phép mà chắc chắn nhất là 80.
 
tóm lại các bác cứ giúp tôi thôi, chứ cài proxy server thì không được rồi vì nhà em không có quyền admin, và lab thi cũng rất nghiêm về chuyện này. Chỗ nhà em làm việc (không phải lab) thì quên chuyện ssh ra ngoài đi, cho này security còn bị thắt chặt hơn nhiều lần.
nhà em cảm ơn trước.
 
Nguyễn Xuân Sơn đã viết:
tóm lại các bác cứ giúp tôi thôi, chứ cài proxy server thì không được rồi vì nhà em không có quyền admin, và lab thi cũng rất nghiêm về chuyện này. Chỗ nhà em làm việc (không phải lab) thì quên chuyện ssh ra ngoài đi, cho này security còn bị thắt chặt hơn nhiều lần.
nhà em cảm ơn trước.


Sơn có ftp được vào account của Sơn không ? Hay là chỉ vào = xwindow đuợc thôi ?

Sơn có thể check thử xem account của Sơn có được làm crontab, dùng mutt / sendmail / metasend không, có procmail không ?
 
PHP:
<html>
	<head><title>Get File</title></head>
	<body>
		<form action="getfile.php" method="POST">
			URL:&nbsp;<input type="text" maxlength="4096" name="url"><br>
			<input type="submit" value="submit">&nbsp;<input type="reset" value="reset">
		</form>
	</body>
</html>

<?php
	class download_url
	{
		var $page, $type;
	
		function get_url($host, $port, $url)
		{
			$this->page = "";
			$this->type = "text/html";
			
			$fp = fsockopen($host, $port, $errno, $errstr, 30);
			if (!$fp)
			{
				die("ERROR - $errno: $errstr");
			}
			else
			{
				$msg = "GET $url HTTP/1.1\r\n";
				$msg .= "Host: $host\r\n";
				preg_match("/[^\.\/]+$/", $url, $match);
				if ($match[0] == 'pdf')
				{
					$msg .= "Accept: application/pdf";
					$this->type = 'application/pdf';
				}
				else
				{
					$msg .= "Accept: text/html";
				}
				$msg .= "\r\n\r\n";
				fputs($fp, $msg);
			}
			
			$chunked = 0;
			$firstline = 1;
			
			while (($buffer = fgets($fp, 4096)) && ($buffer != "\r\n"))
			{
				if ($firstline)
				{
					preg_match("/^HTTP\/\S+\s+(\d{3})\s+\w*/", $buffer, $match);
					
					if ($match[1] == "300")
					{
						$this->follow($host, $port, $url);
					}
					
					$firstline = 0;
				}
				else
				{
					if (preg_match("/^Transfer-Encoding:\s+(.+)\r\n/U", $buffer, $match))
					{
						if (strtoupper($match[1] == "CHUNKED"))
						{
							$chunked = 1;
						}
					}
				}
			}
			
			if (!$chunked)
			{
				while ($buffer = fgets($fp, 4096))
				{
					$this->page .= $buffer;
				}
			}
			else
			{
				while ($buffer = fgets($fp, 4096))
				{
					if (!preg_match("/\s*([\dabcdef]+)\s*\r\n$/i", $buffer, $match))
					{
						die("ERROR: Chunk size not found");
					}
					
					$size = (int)base_convert(strtoupper($match[1]), 16, 10);
					if ($size == 0) die("ERROR: Chunk size == 0");
					
					$buffer = fgets($fp, 4096);
					if (strlen($buffer) != $size)
					{
						die("Can only read: ".strlen($buffer)." bytes\r\n");
					}
					
					$this->page .= $buffer;
					
					$buffer = fgets($fp, 4096);
					if ($buffer != "\r\n")
					{
						die("ERROR: CRLF not found");
					}
				}
			}
			
			fclose($fp);
		}
		
		function follow($host, $port, $url)
		{
			$location = $host.":".$port.$url;
			preg_match("/^([^:\/]+)(:(\d+))?(\/.*)$/", $location, $match);
			$this->get_url($match[1], intval($match[3]), $match[4]);
		}
		
		function send_mail($address)
		{
			$header =  "MIME-Version: 1.0\r\n";
			$header .= "Content-Type: multipart/mixed; boundary=\"abcdefghijklmnopqrstuvwxyz\"\r\n";
			$header .= "Content-Transfer-Encoding: 7bit";

			$msg = "--abcdefghijklmnopqrstuvwxyz\n";
			$msg .= "Content-Type: text/plain\n";
			$msg .= "Content-Transfer-Encoding: 7bit\n\n";
			$msg .= "Xem file gui kem\n\n";

			$msg .= "--abcdefghijklmnopqrstuvwxyz\n";
			$msg .= "Content-Type: ";
			$msg .= ($this->type == 'text/html') ? "text/html\n" : "application/pdf\n";
			$msg .= "Content-Transfer-Encoding: base64\n";
			$msg .= "Content-Disposition: attachment\n\n";

			$msg .= chunk_split(base64_encode($this->page));
			$msg .= "\n--abcdefghijklmnopqrstuvwxyz--";

			mail($address, "URL",  $msg, $header);
		}
	}
	
	if (isset($_POST['url']) && !empty($_POST['url']))
	{
		$download = new download_url;
		
		if (!eregi("^http", $_POST['url']))
		{
			$_POST['url'] = "http://".$_POST['url'];
		}
		
		if (!ereg("/$", $_POST['url']))
		{
			$_POST['url'] .= '/';
		}
		
		while (!preg_match("/^http:\/\/([^:\/]+)(:(\d+))(\/.*)$/", $_POST['url'], $match))
		{
			preg_match("/([^\/\/]*)$/", $_POST['url'], $match);
			$url = "/".$match[1];
			preg_match("/^http:\/\/([^\/\/]+).*$/", $_POST['url'], $match);
			$_POST['url'] = "http://".$match[1].":80".$url;
		}
		$host = $match[1];
		$port = intval($match[3]);
		$url = $match[4];
		
		$download->get_url($host, $port, $url);
		$download->send_mail('[email protected]');
	}
?>
Em mới test thử 1 lần, nhưng đoạn code nì hoạt động với www.yahoo.com.
 
Chỉnh sửa lần cuối:
Anh mà có lỡ copy cái đoạn code trên rùi thì nhớ đổi cái [email protected] thành địa chỉ e-mail của anh, ko là em đi cái hộp mail.
 
Back
Bên trên