Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > access pointe bağlanma
Yazar
firdevs


avatar
izmir
Kayıt: 07.02.2006
12.09.2007-14:57 #27247
belirttiğim bir access pointe bağlanıp o anda ona bağlı olan makinelerin mac adreslerini veritabanına(mysql) kaydeden bir program yazmam lazım. örnek olabilecek bir kaynak, program gönderebilen olura çok iyi olur.





Yazar
virgo


avatar
istanbul
Kayıt: 18.01.2006
12.09.2007-19:52 #27253
programlama.com'da belki vardır peace





there is no place like 127.0.0.1










Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
12.09.2007-22:57 #27254
her accespoint in api si aynı olmayabilir. bunu yapmak için öncelikle access point'e ait yazılım geliştirme kitine sahip olman lazım. accesspointler telnetten sorugalanbiliyor ama ne kadar bilgiyi dışarı veriyorlar bilmiyorum





N/A
Yazar
firdevs


avatar
izmir
Kayıt: 07.02.2006
13.09.2007-14:05 #27259
herhangi bir web sayfasının kaynak kodunu c proramı içinden çağırabilirmiyim?? bir değişkene atayabilir miyim örneğin





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
13.09.2007-21:31 #27280
firdevs yazdi
 
herhangi bir web sayfasının kaynak kodunu c proramı içinden çağırabilirmiyim?? bir değişkene atayabilir miyim örneğin

http://curl.haxx.se/download.html

Bu adresten curl programını indirip komut satırından http request yapabilirsin.

curl http://www.google.com.tr/

Response olarak html kodları geliyor ve standart çıkışa yazdırılıyor. Bu komutu C koduna gömerek çıkış akışını yönlendirince gelen karakter katarını bir değişkene atayabilirsin.

Bu arada win32'de ssl enabled sürümünü çalıştırırken libssl32.dll bulunamadı hatası verebilir. Ben onun yerine php5 kütüphanesindeki ssleay32.dll dosyasını kopyalayıp adını libssl32.dll olarak değiştirerek sorunu hallettim.


Basit bir örnek C kodu yazdım. Konsoldan bir adres giriliyor ve bu adres http_response_body fonksiyonuna aktarılarak karşıdan gelen html kodları bir karakter dizisine kaydediliyor. Çıkışı bir değişkene atayabilmek için ilk önce disk üzerinde geçici bir dosyaya yazdırıp o dosyadan okutuyorum. Standart çıkışı bir karakter katarına atayabilmek için belki daha pratik bir yöntem olabilir.


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

#define MAX_RESPONSE_CHARS 102401 // 100KB
#define MAX_REQUEST_CHARS 256

int http_response_body(char *, const char *);

int main(void) {
	char response[MAX_RESPONSE_CHARS];
	char url[MAX_REQUEST_CHARS];
	printf("Enter URL: ");
	scanf("%s", url);
	http_response_body(response, url);
	printf("%s", response);
	return 0;
}

int http_response_body(char *response, const char *url) {
	char curl_command[MAX_REQUEST_CHARS+255];
	char tmp_name[] = "curl_temp_file.txt";
	char tmp_fullname[255];
	FILE *tmp;
	int last=0;
	sprintf(tmp_fullname, "%s/%s", getenv("TEMP"), tmp_name);
	sprintf(curl_command, "curl -s %s >> %s", url, tmp_fullname);
	if(system(curl_command)) {
		if(tmp = fopen(tmp_fullname, "r")) {
			last = fread(response, 1, MAX_RESPONSE_CHARS, tmp);
			*(response + last) = '\0';
			fclose(tmp);
			remove(tmp_fullname);
			return 1;
		}
	}
	return 0;
}






Let`s make this world a better place to live !

Yazar
firdevs


avatar
izmir
Kayıt: 07.02.2006
17.09.2007-15:47 #27426
clairvoyant yazdi
 



yardım için çok sağol, ama bi sorun daha var içeriğini yazdırdığım sayfada arama yapabilirmiyim??yani aslında sayfayı text dosyasına kaydetmem de gerekmiyor, o sayfa içinde gerekli olan bilgileri değişkenlere atayabilir miyim? kendim uğraştım,araştırdım ama bulup yapamadım, yani kolaya kaçmak için sormuyorum burda ama yapamadım.





Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
17.09.2007-16:55 #27427
Verdiğim kod kaynak kodu bir değişkene atayabilmek için zaten. http_response_body fonksiyonu const char *url parametresiyle gelen adrese bağlanıp oradan gelen html kodlarını char *response karakter dizisine atıyor. Standart çıktı akışını kısa yoldan bir değişkene atayabilmek için sağlam bir yöntem bulamadım, bu yüzden geçici bir dosyadan faydalandım.





Let`s make this world a better place to live !

Yazar
caglarmenguc


avatar
istanbul
Kayıt: 29.01.2006
30.09.2007-13:58 #28167
firdevs yazdi
 
herhangi bir web sayfasının kaynak kodunu c proramı içinden çağırabilirmiyim?? bir değişkene atayabilir miyim örneğin


tabi. sadece soket ile istediğinizi yapabilirsiniz. aynen şöyle;
web sitesinde 80 portundan bağlancak bir soket yaratılır;

SOCKET sHttp;
struct sockaddr_in addr;
char* buffer = new char[4096]; // bu büyüklük yapacağınız işe göre değişebilir.

if ((sHttp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
throw "socket failed !"

addr->sin_addr.s_addr = inet_addr("www.iucoders.com");
addr->sin_family = AF_INET;
addr->sin_port = htons(80);

if (addr->sin_addr.s_addr == INADDR_NONE)
{
struct hostent* host = gethostbyname("www.iucoders.com");
if (host == NULL)
throw "Unable to resolve server : "

CopyMemory(&addr->sin_addr, host->h_addr_list[0], host->h_length);
}

if ( connect(sHttp, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR )
throw "connect failed !";

string httpReq = "GET / HTTP/1.1\r\nHost: www.iucoders.com";
httpReq += "Accept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Win32)\r\n";
httpReq += "Connection: Keep-Alive\r\nContent-type: application/octet-stream\r\nContent-Length: 0\r\n\r\n";

httpReq adlı string i send metodu ile gönderdiğinizde web sitesinden size bir sonuç stringi döner. eğer adres doğruysa bu stringin içinde "content-length: " stringini aramalısınız. bu parametre ile size gönderilecek olan byte uzunluğu verilecektir. yine aynı stringin içinde (çift)carriage return & line feed ("\r\n\r\n") stringi olacaktır. bu stringten hemen sonra data başlar. işte buradan sonra sonsuz bir döngü içerisinde recv metodu ile size gelen byte ları alabilirsiniz.

son data geldikten sonra web sitesi bağlantıyı kesecektir.

eğer bir web sitesinin ana sayafasını değil de başka bir linki almak isterseniz get httpReq stringinin get satırını şu şekilde değiştirebilirsiniz;

string httpReq = "GET /forum.jsp HTTP/1.1\r\nHost: www.iucoders.com\r\n";

NOT: yukarıda verdiğim örnek satırları kendi kodlarımdan değiştirerek yazdım. yukarıdaki haliyle çalışmayabilir.





Life is a game of cards...
A good player, even with a bad hand of cards, will play well and emerge a winner...


Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
30.09.2007-14:15 #28169
bu arada bu AP lerin çoğunda Linux var. terminalden ona bağlanabilirsin. ordan istediğin veriyi alabilirisn.
 
telnet ip 23






N/A
Yazar
firdevs


avatar
izmir
Kayıt: 07.02.2006
02.10.2007-09:32 #28230
orhan yazdi
 
bu arada bu AP lerin çoğunda Linux var. terminalden ona bağlanabilirsin. ordan istediğin veriyi alabilirisn.
 
telnet ip 23

bu bilgileri bir defaya mahsus değil sürekli almam gerektiği için bir program aracılığıyla yapmam şarttı.

caglarmenguc yazdi
 


socketle oluşturarak yapmayı denemiştim ama şifreli erişimi nasıl yapacağımı bulamamıştım. clairvoyant yazdığı örnek kodu kullandım ve şimdi access pointe bağlı olan mac adreslerini mysqle atabiliyorum. curl metoduyla yapmamı çok şık bulmasalar da istenilen işlemi yapıyor. yardımlar için teşekkürler.





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb