30/09/2018, 18:27

Cách dùng hàm `system` để viết chương trình IP Scanner?

Mình đang muốn làm 1 cái IP scanner dùng bằng system()
Vậy mình muốn dùng input của user cho system() có được không?
Mong anh @ltd trả lời ạ
VD:

int main() {
    std::string CMD;
    std::cout << "- Enter Website's Name : ";
    std::cin >> CMD;
    system("ping" + CMD)           /* kiểu như vậy đó */
    Sleep(10000);
    return 0;
}
Mai Anh Dũng viết 20:28 ngày 30/09/2018

Cụ thể hơn về cái IP Scanner đi, chương trình này sẽ làm gì?

ZeroUnix viết 20:39 ngày 30/09/2018

Nó sẽ tìm cái IP Address của Website thông qua lệnh ping của cmd.exe đó anh

Mai Anh Dũng viết 20:44 ngày 30/09/2018

Em code trên Windows hay Linux? À, chắc là Windows đúng không? Chưa làm bao giờ, để thử phát

ZeroUnix viết 20:29 ngày 30/09/2018

Vâng ạ Anh cứ dùng thử đi

Mai Anh Dũng viết 20:43 ngày 30/09/2018

Sửa lại ví dụ của Microsoft ở đây một chút để được code này.

Code này lấy ip của daynhauhoc.com

// crt_popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

	char   psBuffer[1000];
	FILE   *pPipe;

	/* Run DIR so that it writes its output to a pipe. Open this
	* pipe with read text attribute so that we can read it
	* like a text file.
	*/

	if ((pPipe = _popen("ping daynhauhoc.com -n 1 -4", "rt")) == NULL)
		exit(1);

	/* Read pipe until end of file, or an error occurs. */

	while (fgets(psBuffer, 1000, pPipe))
	{
		char   ip[20];
		for (int i = 0; i < 1000; ++i) {
			if (psBuffer[i] == '[') {
				++i;
				while (psBuffer[i + 1] != ']') {
					putchar(psBuffer[i++]);
				}
				putchar(psBuffer[i]);
				break;
			}
		}
	}


	/* Close pipe and print return value of pPipe. */
	if (feof(pPipe))
	{
		printf("\nProcess returned %d\n", _pclose(pPipe));
	}
	else
	{
		printf("Error: Failed to read the pipe to the end.\n");
	}
}
ZeroUnix viết 20:27 ngày 30/09/2018

ý em là mình có thể lấy website để ping từ input của user ấy chứ không phải chỉ 1 web

Mai Anh Dũng viết 20:40 ngày 30/09/2018

Aizo, không tự lấy input từ user rồi thay vào được á

ZeroUnix viết 20:27 ngày 30/09/2018

Là sao ạ? ý là nhập tên web vào thì cmd sẽ ping cho mình chứ không phải là làm lại code

ZeroUnix viết 20:35 ngày 30/09/2018

Kiểu như

[Code]
std::string user_INPUT;
std::cout << "- Web name : ";
std::cin >> user_INPUT;
std::cout << "- IP : "; system (“ping” user_INPUT);
[Màn hình Console]

  • Web name : facebook.com /* đây là dữ liệu Input */
  • IP : xxx.xxx.xxx
Mai Anh Dũng viết 20:42 ngày 30/09/2018

Mấy cái đấy em tự làm chứ, đơn giản mà

// crt_popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

	char   psBuffer[1000];
	FILE   *pPipe;

	/* Run DIR so that it writes its output to a pipe. Open this
	* pipe with read text attribute so that we can read it
	* like a text file.
	*/

	char website[1000];
	char command[1000];
	printf("Nhap vao dia chi web muon lay IP: ");
	fgets(website, 1000, stdin);
	sprintf_s(command, 1000, "ping %s -n 1 -4", website);

	if ((pPipe = _popen(command, "rt")) == NULL)
		exit(1);

	/* Read pipe until end of file, or an error occurs. */

	while (fgets(psBuffer, 1000, pPipe))
	{
		char   ip[20];
		for (int i = 0; i < 1000; ++i) {
			if (psBuffer[i] == '[') {
				++i;
				while (psBuffer[i + 1] != ']') {
					putchar(psBuffer[i++]);
				}
				putchar(psBuffer[i]);
				break;
			}
		}
	}


	/* Close pipe and print return value of pPipe. */
	if (feof(pPipe))
	{
		printf("\nProcess returned %d\n", _pclose(pPipe));
	}
	else
	{
		printf("Error: Failed to read the pipe to the end.\n");
	}
}
ZeroUnix viết 20:42 ngày 30/09/2018

Em làm được rồi cảm ơn anh

Bài liên quan
0