Ir ao conteúdo
  • Cadastre-se

Pegar IP e fazer checagem com MySQL [ C++ ]


myNameX
Ir à solução Resolvido por Plástico Bolha,

Posts recomendados

Como pegar IP da rede da pessoa que iniciar um programa em C++?

Eu estou criando um programa que quando o usuário abrir ele, o ip dele é pego e é verificado no banco de dados se existe algum registro com o IP, se tiver ele abre o site que está registrado com o IP dele.

Meu código é (Windows Form C++)

MyForm.h

#pragma once#include <stdio.h>#include <windows.h>namespace GE {	using namespace System;	using namespace System::ComponentModel;	using namespace System::Collections;	using namespace System::Windows::Forms;	using namespace System::Data;	using namespace System::Drawing;	using namespace MySql::Data::MySqlClient;		/// <summary>	/// Summary for MyForm	/// </summary>	public ref class MyForm : public System::Windows::Forms::Form	{	public:		MyForm(void)		{			InitializeComponent();			//			//TODO: Add the constructor code here			//		}	protected:		/// <summary>		/// Clean up any resources being used.		/// </summary>		~MyForm()		{			if (components)			{				delete components;			}		}	private: System::Windows::Forms::Button^  button1;	private: System::Windows::Forms::TextBox^  textBox1;	protected:	private:		/// <summary>		/// Required designer variable.		/// </summary>		System::ComponentModel::Container ^components;#pragma region Windows Form Designer generated code		/// <summary>		/// Required method for Designer support - do not modify		/// the contents of this method with the code editor.		/// </summary>		void InitializeComponent(void)		{			this->button1 = (gcnew System::Windows::Forms::Button());			this->textBox1 = (gcnew System::Windows::Forms::TextBox());			this->SuspendLayout();			// 			// button1			// 			this->button1->Location = System::Drawing::Point(80, 145);			this->button1->Name = L"button1";			this->button1->Size = System::Drawing::Size(84, 26);			this->button1->TabIndex = 0;			this->button1->Text = L"button1";			this->button1->UseVisualStyleBackColor = true;			this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);			// 			// textBox1			// 			this->textBox1->Location = System::Drawing::Point(41, 43);			this->textBox1->Name = L"textBox1";			this->textBox1->Size = System::Drawing::Size(185, 20);			this->textBox1->TabIndex = 1;			// 			// MyForm			// 			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;			this->ClientSize = System::Drawing::Size(254, 205);			this->Controls->Add(this->textBox1);			this->Controls->Add(this->button1);			this->Name = L"MyForm";			this->Text = L"MyForm";			this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);			this->ResumeLayout(false);			this->PerformLayout();		}#pragma endregion	private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {	}	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {		String^ constring = L"datasource=localhost;port=3306;username=root;password=";		MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);		MySqlCommand ^cmdDataBase = gcnew MySqlCommand("SELECT * FROM `a`.`sites` WHERE IP='" + "FUNÇÃO QUE PEGA O IP"  + "';", conDataBase);		MySqlDataReader ^myReader;				try {			conDataBase->Open();			myReader = cmdDataBase->ExecuteReader();			while (myReader->Read()) {				System::Diagnostics::Process::Start(myReader->GetString("SiteDivulgado"));			}		}		catch (Exception^ ex)		{			MessageBox::Show(ex->Message);		}	}	};}

MyForm.cpp

#include "MyForm.h"using namespace System;using namespace System::Windows::Forms;using namespace MySql::Data::MySqlClient;[STAThread]void main(array<String^>^ args) {	Application::EnableVisualStyles();	Application::SetCompatibleTextRenderingDefault(false);	AX::MyForm form;	Application::Run(%form);}

Espero que alguém consiga me ajudar, abraços.

Link para o comentário
Compartilhar em outros sites

Como pegar IP da rede da pessoa que iniciar um programa em C++?

Sem nenhum código a pergunta fica "muito vaga" . . . Como são as tabelas do banco ? O banco é remoto ? Local ? As pessoas que acessam o programa estão na mesma rede local ? O programa usa MVC (camada 3) para acessar o banco ? Enfim . . . A sua pergunta ficou muito vaga =) . . .

Link para o comentário
Compartilhar em outros sites

Sem nenhum código a pergunta fica "muito vaga" . . . Como são as tabelas do banco ? O banco é remoto ? Local ? As pessoas que acessam o programa estão na mesma rede local ? O programa usa MVC (camada 3) para acessar o banco ? Enfim . . . A sua pergunta ficou muito vaga =) . . .

 

Estou querendo pegar o IP da rede do usuário (Ex: em PHP eu uso $_SERVER["REMOTE_ADDR"]), é o IP externo, a parte do MySQL eu já tenho, só preciso pegar o Ip externo do usuário pra fazer uma verificação se existe no banco de dados.

Link para o comentário
Compartilhar em outros sites

  • Solução

Acho que isso deve servir . . . Esse código abaixo retorna "TODOS" os IPs privados, e o IP público do usuário  =) . . .

#include <windows.h> #include <wininet.h> #include <iostream>#include <stdio.h> #include <winsock.h> #include <conio.h>#include <windows.h> WSADATA data; SOCKET winsock; SOCKADDR_IN sock; #pragma comment(lib, "wininet")#pragma comment(lib, "wsock32.lib")int IPs_Local(){	char buffer[1024];	char buffer2[1024];	int bytes;	char NomeDaMaquina[80];	struct hostent *IPsDaMaquina;	struct in_addr addr;	if(WSAStartup(MAKEWORD(1,1),&data) == SOCKET_ERROR) {                                               		printf("Erro ao inicializar o winsock"); 		getch();		return NULL; 	} 	if((winsock = socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR){ 		printf("Erro ao criar socket"); 		getch();		return 0; 	} 		if (gethostname(NomeDaMaquina, sizeof(NomeDaMaquina)) == SOCKET_ERROR) {		printf("Erro %s\n", WSAGetLastError());        return NULL;    }	printf("Nome da maquina: %s\n", NomeDaMaquina);	IPsDaMaquina = gethostbyname(NomeDaMaquina);    if (IPsDaMaquina == 0) {		printf("Problema no Host !\n");        return NULL;    }		// Retorna todos os IPs locais . . . Ethernet adaptador local, Ethernet adaptador VMware (VMnet1), Ethernet adaptador VMware (VMnet8), Ethernet adaptador VirtualBox	// Só digita ipconfig que você vai ver todos os seus IPs locais . . . Como o local IPv4	for(int i = 0; IPsDaMaquina->h_addr_list[i] != 0; ++i) {		memcpy(&addr, IPsDaMaquina->h_addr_list[i], sizeof(struct in_addr));		printf( "IP %d : %s\n", i, inet_ntoa(addr));    }	closesocket(winsock); 	WSACleanup();	return 0;}void IP_Publico(){    HINTERNET AbrirPagina, CarregaResposta;    DWORD Tamanho;	char IP[47];    AbrirPagina = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);    CarregaResposta = InternetOpenUrlA(AbrirPagina, "http://icanhazip.com/", NULL, 0, INTERNET_FLAG_RELOAD, 0);    InternetReadFile(CarregaResposta, &IP, sizeof(IP), &Tamanho);    IP[Tamanho] = '\0';    InternetCloseHandle(CarregaResposta);    InternetCloseHandle(AbrirPagina);    printf("IP publico: %s\n", IP);}int main(int argc, char* argv[]){	IPs_Local();	IP_Publico();	system("PAUSE");}
Link para o comentário
Compartilhar em outros sites

Consegui desse jeito

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {		HINTERNET AbrirPagina, CarregaResposta;		DWORD Tamanho;		char IP[47];		AbrirPagina = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);		CarregaResposta = InternetOpenUrlA(AbrirPagina, "http://icanhazip.com/", NULL, 0, INTERNET_FLAG_RELOAD, 0);		InternetReadFile(CarregaResposta, &IP, sizeof(IP), &Tamanho);		IP[Tamanho] = '\0';		InternetCloseHandle(CarregaResposta);		InternetCloseHandle(AbrirPagina);		textBox1->Text = Convert::ToString(IP);		String^ constring = L"datasource=localhost;port=3306;username=root;password=";		MySqlConnection^ conDataBase = gcnew MySqlConnection(constring);		MySqlCommand ^cmdDataBase = gcnew MySqlCommand("SELECT * FROM `a`.`sites` WHERE IP='" + printf(IP) + "';", conDataBase);		MySqlDataReader ^myReader;			try {			conDataBase->Open();			myReader = cmdDataBase->ExecuteReader();			while (myReader->Read()) {								System::Diagnostics::Process::Start(myReader->GetString("SiteDivulgado"));			}		}		catch (Exception^ ex)		{			MessageBox::Show(ex->Message);		}	}

Na textbox que eu criei está aparecendo apenas "TRUE"

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...