Yazar |
|
firdevs
izmir
Kayıt: 07.02.2006 |
|
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
istanbul
Kayıt: 18.01.2006 |
|
programlama.com'da belki vardır
there is no place like 127.0.0.1
|
|
Yazar |
|
orhan
istanbul
admin
Kayıt: 17.11.2005 |
|
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
izmir
Kayıt: 07.02.2006 |
|
herhangi bir web sayfasının kaynak kodunu c proramı içinden çağırabilirmiyim?? bir değişkene atayabilir miyim örneğin
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
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
izmir
Kayıt: 07.02.2006 |
|
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
Antalya
Kayıt: 05.05.2006 |
|
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
istanbul
Kayıt: 29.01.2006 |
|
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
istanbul
admin
Kayıt: 17.11.2005 |
|
bu arada bu AP lerin çoğunda Linux var. terminalden ona bağlanabilirsin. ordan istediğin veriyi alabilirisn.
N/A
|
|
Yazar |
|
firdevs
izmir
Kayıt: 07.02.2006 |
|
orhan yazdi | bu arada bu AP lerin çoğunda Linux var. terminalden ona bağlanabilirsin. ordan istediğin veriyi alabilirisn.
|
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
|
|
| | | | | | |