Linux Forum Казахстан

Общий => Вопрос новичка => Тема начата: turbo от 20 Июня 2008, 23:49

Название: Commandline blocklist converter
Отправлено: turbo от 20 Июня 2008, 23:49
есть файл btblocklistconverter.c с содержимым
/*
 * Copyright 2007 Ryan Walklin, All Rights Reserved
 *
 * This file may be used or modified without the need for a license.
 *
 * Redistribution of this file in either its original form, or in an
 * updated form may be done under the terms of the GNU GENERAL
 * PUBLIC LICENSE.  If this license is unacceptable to you then you
 * may not redistribute this work.
 *
 * See the file COPYING for details.
 */

/* btblocklistimporter.c */


//#include <curl/curl.h>
//#include <curl/easy.h>

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>

#include "blocklistquery.h"
#include "fgetline.h"


/* functions */

int64_t filesize(char* filename)
{
struct stat statbuf;
stat(filename, &statbuf);
return statbuf.st_size;
}


int main(int argc, char **argv)
{
int success = 1, result = 0;
char *filename;
FILE *list, *convertedList;

/* main */
if(argc!=2) goto usage;
if(argv[1][0]=='-') goto usage;

filename=argv[1];

if ((list = fopen(filename, "r")) == NULL)
{
perror(filename);
return 1;
}
else
{
if ((convertedList = fopen("./level1.dat", "w")) == NULL)
{
perror("level1.dat");
fclose(list);
return 1;
}
else
{
// convert
int64_t blockListSize = filesize(filename);

int64_t lineLength, lineCount = 0, parsedLength = 0;
ipBlock convertedIPBlock;
char *iprange, *ipend, *ipstart;
struct in_addr tempIP;

while ((iprange = fgetline(list)))
{
// 1 byte short to deal with Win32 CRLF line endings - ? dangerous - lets hope they don't change the format
lineCount++;
parsedLength += (lineLength = strlen(iprange));

if (lineLength == 0) break;

ipend = calloc(1, lineLength+1);
strncpy(ipend, iprange, lineLength);
free(iprange);

strsep(&ipend,":");
ipstart = strsep(&ipend, "-");

inet_aton(ipstart, &tempIP);
convertedIPBlock.startIP = ntohl(tempIP.s_addr);

inet_aton(ipend, &tempIP);
convertedIPBlock.endIP = ntohl(tempIP.s_addr);

//write
if (fwrite(&convertedIPBlock, sizeof(ipBlock), 1, convertedList) != 1)
{
// notify with error
success = 0;
break;
}
if (lineCount % 200 == 0)
{
fprintf(stdout, "%79sr", " ");
fprintf(stdout, "Converting - %.2f%% complete", parsedLength * 100.0 / blockListSize);
}
}
fclose(list);
fclose(convertedList);
// close files
if (success)
{
fprintf(stdout, "%79sr", " ");
fprintf(stdout, "Converting - 100%% completen");
}
}
}
return result;

usage:
fprintf(stderr, "Usage: %s blocklistfilen", argv[0]);
fprintf(stderr, "Version: %.2fn", VERSION);
return 1;
}

собственно вопрос: как им воспользоваться?
т.е. как с помощью консоли с использованием этого файла конвертировать блоклисты?
Название: Commandline blocklist converter
Отправлено: Script от 21 Июня 2008, 04:06
Я конечно в этом не так сильно разбираюсь, но помойму это исходный код программы на С.
Значит для её использования тебе надо её скомпилировать.
Для компиляции в линукс есть GCC

script@script-laptop:~$ make /home/script/C/btblocklistconverter.c

помойму так,  это ты в консоле должен набрать
путь файла измени на свой.
Я gcc не использую, так что если что исправте меня, хотя вроде правильно
Название: Commandline blocklist converter
Отправлено: turbo от 21 Июня 2008, 11:31
команда make
выдаёт
`btblocklistconverter.c' is up to date.
Script
я вот и думаю может это скрипт написаный на Си?
кто знает, как отличить скрипт от программы?

man gcc
напугал обилием информации, куда копать?

если прога то понятно что компиляция нужна,
потом поместить полученный файл в директорию bin,
и сделать файл выполняемым.
а затем можно на здоровье конвертировать блоклисты.
но как всё это проделать я ещё незнаю.
Название: Commandline blocklist converter
Отправлено: Vicpo от 21 Июня 2008, 12:04
похоже что это один класс из какой то программы, вы вообще где взяли этот файл?
Название: Commandline blocklist converter
Отправлено: turbo от 21 Июня 2008, 12:18
вот собственно отсюда.

I think for most people the blocklist from Bluetack provides adequate protection against malicious peers.

If you want to provide your own blocklist, the command-line converter at http://trac.transmissionbt.com/attachment/...listconverter.c (//\"http://trac.transmissionbt.com/attachment/ticket/827/btblocklistconverter.c\") will convert a blocklist in Bluetack format to the binary format Transmission uses. You can then replace ~/Library/Application Support/Transmission/blocklist with your file.
Название: Commandline blocklist converter
Отправлено: Vicpo от 21 Июня 2008, 12:29
эту библиотеку надо положить в исходники Transmission (btorrent client) и собрать с ней из этих исходников после чего сможете формировать свой блоклист (примерная суть того что там написано)
Название: Commandline blocklist converter
Отправлено: turbo от 21 Июня 2008, 13:05
Vicpo
спасибо, испробую этот вариант.

в сорцах есть директория daemon с другими файлами *.c
т.е. нужно файл btblocklistconverter.c поместить туда.
нужно ли править Makefile, или при установке цепляется всё что в есть в daemon?
Название: Commandline blocklist converter
Отправлено: Vicpo от 21 Июня 2008, 14:25
просто поместить править ничего не надо как я понял