Minimum requirements:
Platform: Intel pentium4, 2.66 ghz
Operating System: Windows xp sp3.
Memory: 512MB.Note: I do not know if it works on other platforms and operating systems.

Release beta version.
IPCheck enable you to create your own ipfilter.
IPCheck include tutorials that guide you, step by step in the process.
IPCheck also has a English Support website.
You should note that this website is under construction, so be patient, everything will come.
IPCheck is a totally free of charge and open source application.
As with all beta versions, you might find errors in the application, if so, please report it in this thread.

Please note that I am newbie in the programming issues.
You can also download the source code, if you think you can contribute something to the project, you are welcome.
If you have any suggestions, please let me know.
For my part I am open to any constructive criticism, which may help to improve implementation.
If you think the ip filter is not necessary, this application is not for you.
Thanks to everyone who helped me to choose the blacklists, and especially
The words of support.

IpCheck does not filtering, nor avoid any download.
IpCheck only give you the chance to manage fake files database.
IpCheck already contain a database with fake files, classifieds by hash file.
You can, in fact you should increase this database, via IpCheck feature called
<Fake file manager>.
You must have one thing in mind, the more you update your database, the higher the effectiveness, and more likely you are to verify the authenticity of a file, before downloading it.
In other words, IPCheck will give you the fishing rod and bait, but it is you who has to catch the fish.
When you find a fake file on the network, add it to your database.
And remember, you are the best filter for emule.
You will find related guidelines via Menu>Help feature.
_________________________________________________________________

about, Power-Portal,http://ed2kstats.power-portal.to/ed2k.php?hash=#hashid,
it's currently out of order, however I have decided to keep it, hoping that it is a temporary incident.
Anyway you can use peerates or Shortypower too.

added video tutorials than you can display from app itself
Added video tutorials that can be viewed from the application.
These video tutorials are hosted on YouTube.
These video tutorials in avi format, can also be viewed using whatever media player.
If you use this option, you should use the full screen option.

Important: If you use Bin, you'll need Framework 2.0 installed.
Does not added video tutorials to app folder, due long file sizes. Anyway, you can download them from application's web site

1 - You use IPCheck on an operating system other than Windows XP, and it works.
2 - You find whatever bug in the operation, of the application.
3 - your computer crashes when using IPCheck.
4 - You have any suggestions for improving the application.
5 - You find an error of translation or grammar. (I'm pretty sure, it'll done )
6 - You find the program useful, and would like to help translate into your language.
8 - You think that the code could be improved, and you know how to. (ty, Avi-3k )
9 - You think, I could add new features.
10- You think that the author, is a very ugly man.

Thanks in advance for your cooperation.
Enjoy IPCheck.
elChele.

This post has been edited by ElChele: 10 September 2010 - 09:49 PM

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

it works ok with .net 2, so that's good,
but i think you could improve a few things...:

use full row select in the list ctrl, it will ease the users when choosing filters

you can also change the list ctrl to include checkboxes, it's a way to select several filters and download simultaneously
(another way is allowing multiple selection, the code is very similar in both cases)

use a progress bar to indicate progress when possible
+ use threading where needed/possible (like in downloads, heavy file i/o, etc), it will make the gui more responsive
(my net connection has issues and the app froze on me several times)

maybe avoid minimizing the main window when opening a secondary one, it's confusing,
also set focus on the new window, otherwise it might not be seen at first

perhaps use tooltips for controllers instead of tips in a different window/tab

for manual editing, i'd suggest using a list ctrl (with paging or a filter textbox like in eMule [in search/shared files])
you can easily add/edit/remove items and you won't have to divide the file

add desctiption to each filter, otherwise the user might not understand its meaning & usage (just 1 more column)

add the abilty to translate the gui, i'm sure people would like to help you translate it

(several of these items are already included for upcoming Skinner versions, if not already)

i hope you take my constructive criticism the right way, currently the app is not as intuitive as it can be
and this app can help many users, even devs/computer-geeks like me
i suggest you'd focus on the gui, one window is enough (use a similar approch like eMule's gui)

use full row select in the list ctrl, it will ease the users when choosing filters

Done

Quote

you can also change the list ctrl to include checkboxes, it's a way to select several filters and download simultaneously
(another way is allowing multiple selection, the code is very similar in both cases)

I am working on it.
In fact, that was my first choice, but I then thought this could mean a problem for those users with limited resources of cpu.
But the application I endowed with the ability to download some or all lists simultaneously.
To do this, simply go to the IpCheck's web browser> Site Link Manager.
Once there, select all the lists and click the button called DownloadList.
Then you just have to go back to the window called SourceList Manager, and process lists of your choice.
In my case, the whole operation means very little time, but the cpu consumption is 100%.
In fact, your next suggestion, confirmed my suspicion.***

Quote

use a progress bar to indicate progress when possible

I already use the progress bar in the window called SourceList Manager. I will implement in the others, if that's what you're talking about.

Quote

+ use threading where needed/possible (like in downloads, heavy file i/o, etc), it will make the gui more responsive
(my net connection has issues and the app froze on me several times)***

First of all, you remember that I'm quite a beginner in the programming world, for this reason I have some doubts, I comment on, such as:
I assume you are talking about Thread.Sleep(0), but calling before to Application.DoEvents(), maybe onto a try/Cach/End try statement,when looping, in order to keeps the CPU cool.
Although I'm not entirely sure of its effectiveness, since,
Application.DoEvents() will empty the entire message queue, but Sleep(0) only releases the CPU (time slot) and reinsert the thread at the back of the active queue. If Sleep() is called from the UI thread, not a single further message has been processed when it returns.
Please Tell me if I am wrong, if so, can you suggest me another solution?, perhaps some procedure working in background mode?.

Quote

maybe avoid minimizing the main window when opening a secondary one, it's confusing,
also set focus on the new window, otherwise it might not be seen at first

Done

Quote

perhaps use tooltips for controllers instead of tips in a different window/tab

The tips allow for a graphic explanation, much wider, and therefore much easier to understand by the user.
However all buttons already incorporate tooltips feature.

Quote

for manual editing, i'd suggest using a list ctrl (with paging or a filter textbox like in eMule [in search/shared files])
you can easily add/edit/remove items and you won't have to divide the file

If you are talking about Include/Exclude manager feature, divide file feature it is focused to users with low cpu/mem resources.
Anyway, about Divide file feature related to manual editing, the user can choose whether to use or not, ( of course, depending of user cpu resources).

Quote

add description to each filter, otherwise the user might not understand its meaning & usage (just 1 more column)

Please, here let me know ¿if you are talking about listview ctrl, in Source list manager windows?,
if so, the application web site include a wide explanation about each list, in the help file.

Quote

add the abilty to translate the gui, i'm sure people would like to help you translate it

We're talking about satellite assemblies, as well as the cooperation of third parties.
I fear that this will take some time.

Quote

i hope you take my constructive criticism the right way,

Of course my friend!, in fact all your suggestion, they are wellcome.

Quote

currently the app is not as intuitive as it can be

I agree with you.

Quote

i suggest you'd focus on the gui, one window is enough (use a similar approch like eMule's gui)

Do you mean midi/child windows?

Quote

btw, nice job, great to see such a tool (long over due)

Thanks.
I really hope that this tool can help many people.

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

as you can see, most/all functions can be available in the main screen,
just add toolbar buttons, menu items, tabs, etc... for each function.
one of the few advantages of .net is that you can do this easily and add the proper
event handler so all you have to do after creating such a gui is copy-paste the code in the right place

also, the gui can look simple but you can add advanced features later on,
that way it will be efficient for both novice and skilled users.
some features can be automatic and adv. handling can be done in a different window if needed,
e.g: opening zip files, you don't have to add a window just to open a zipped ipfilter,
simply check the file's extension and operate accordingly, it's the same with saving zip (if you want to make it possible)

Quote

First of all, you remember that I'm quite a beginner in the programming world, for this reason I have some doubts, I comment on, such as:
I assume you are talking about Thread.Sleep(0), but calling before to Application.DoEvents(), maybe onto a try/Cach/End try statement,when looping, in order to keeps the CPU cool.
Although I'm not entirely sure of its effectiveness, since,
Application.DoEvents() will empty the entire message queue, but Sleep(0) only releases the CPU (time slot) and reinsert the thread at the back of the active queue. If Sleep() is called from the UI thread, not a single further message has been processed when it returns.
Please Tell me if I am wrong, if so, can you suggest me another solution?, perhaps some procedure working in background mode?.

not sure about that one, i'm not sure how threading is handles in .net and i'm not familiar with it.
if you're a beginner, don't handle threads and harder coding styles,
you should read a lot about it and practice first before actually coding it to ip check.

yes, i did, 'cause sometimes users won't check and this is important for the flow of the app
(even if it's in the help, next to the list itself will make it way easier than you might think)

Quote

Quote

add the abilty to translate the gui, i'm sure people would like to help you translate it

We're talking about satellite assemblies, as well as the cooperation of third parties.

you can use xml files, very easy, very fast to code (read it, insert to a hashtable collection and use labeling in the code)

Quote

If you are talking about Include/Exclude manager feature, divide file feature it is focused to users with low cpu/mem resources.

you can avoid spliting it, if the user wants to manually edit, he/she can use dedicated editors like notepad++
(edit: you can even add a pref+command to do so, like eMule does with web-services)
if you want to keep it light, simply use paging/display-filters in the display and let the user choose (e.g: 100/1000/10000 per page)
you can convert the ip from strings to ints, it will save a lot of memory (but will consume a little cpu and might take a bit longer)

if you know c/c++ a little, i suggest you check eMule ip-filter code, it will help you with ip-check
sorry if i didn't answer everything, but this is a good start for you to work on and to learn from.

some features can be automatic and adv. handling can be done in a different window if needed,
e.g: opening zip files, you don't have to add a window just to open a zipped ipfilter,
simply check the file's extension and operate accordingly, it's the same with saving zip (if you want to make it possible)

The application already does that.
When user clicks on the link for a list either on the tab called Source list, the following occurs:
Let's take as example, file called "Level1.txt"

If the file exists:
The application processes and add it, to the ipfilter.

If the file does not exist as txt:
2 - The application checks if the file exists, in zip format.

If the file exists as zip.
a- The aplication automatically decompress file.
b- The application processes and add it, to the ipfilter.

3 - If the file does not exist as either plain text or zip format.
a- The application will inform the user of this, and suggest he/she, to download it.
To do this, the user only has to go to the tab called download lists, select the file in question, and click on the button called download list.
Once done, return to the tab called Source list and try again.

PS.This scenario assumes that it has not happened, the reason is that the application informs to the user,that the first step to generate the ip filter, is to download the lists of their choice, for further processing.
However, this can happen, in which case the situation is already provided and covered.

The reason for including this feature as many others, is none other than avoiding the user having to open other applications. In other words, a kind of all_in_one.
Nowaday, most people have installed an application that handles zip files.
However, there is always someone who does not have, in which case this event is covered with function, compress and decompress files.
This also applies to edit / modify any list in plain text format.
You can do this without having to open an external text editor such as Notepad,
because all of this, the User can do so, within the application itself.
Same here, with IpCheck's web browser feature.(In fact, I am using it now to posting)
Anyway I agree with you, that a most compact app is needed.
Although my first impulse was to get a user interface, more carefree and happy.
I think I'll keep the two versions of the application, and each user to choose which he/she want to use.

Quote

if you're a beginner, don't handle threads and harder coding styles

Sorry friend, I can not avoid it.
threading.Sleep() here is too expensive in process time,let's take an scenario as example:

Using threading.Sleep() and Level1.txt file, (approximate size 12mb).
Lowest cpu usage, but longer time process, (approximate 12 minute).
This is insane, and the only thing you can get through this, is a user thinking about suicide or worse.

Without Using threading.Sleep() and same file.
Hight cpu usage, but lowest time process, (approximate 2 minutes).I think user don't notice those 2 minutes.

Instead I use another function to refresh memory, such as, threading.thread.memorybarrier().
However we must not lose sight of the fact that data resides in cache, so it is normal that the application uses ram memory.
For this reason the data are not permanent, and are destroyed, once the ip filter file is generated .

Quote

yes, i did, 'cause sometimes users won't check and this is important for the flow of the app
(even if it's in the help, next to the list itself will make it way easier than you might think)

I agree.
In fact, the application will load a help file, with the necessary information, when the user requires.
Also load a txt file, with the description of each of the blacklists used by the application, instead of using the column called description, as you suggest above.
The reason is that frequently related information, is very broad as to include in a single row.
This file will be load, pressing a button called view list decription, in toolbar.
Of course, every buttons includes tooltips.

Quote

you can use xml files, very easy, very fast to code (read it, insert to a hashtable collection and use labeling in the code)

Here I have used localized resource files.
For now, I've tested with four languages, such as, Spanish, English, French, and German.
In the case of French and German language, but I have only translated the text of three commands buttons, in order to create the appropriate resource files.
The reason to translate only three buttons, is because I do not trust much of the online translators, to translate whole application gui.
Of course this is provisional and may become permanent, if the users are encouraged to help with the translation, of the application interface.
Because I have no operating system with all these languages, what I do is change the anguage setting via code, in order to test if it works, and actually it works fine.

Quote

you can avoid spliting it, if the user wants to manually edit, he/she can use dedicated editors like notepad++

And suppose the user wants to exclude the following IP range:
140.240.000.185 - 140.240.000.185

So open your notebook to find the ip range, (140.240.000.185 - 140.240.000.185).
In this case, the notebook will inform the user that the range does not exist, and indeed is theoretically the case, since this range does not exist physically in the file.

But in fact if it exists, because it is in the range: 140.240.000.000 - 140.240.255.255, (between IpStart through IpEnd)

Here you need code to find the range, through to get it I use the philosophy of
divide and conquer algorithm.
since it say:
Copy & Paste.

Quote

A divide and conquer algorithm works by recursively breaking down a problem into two or more sub-problems of the same (or related) type, until these become simple enough to be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem.

This technique is the basis of efficient algorithms for all kinds of problems, such as sorting (e.g., quicksort, merge sort)....

For this reason the application divides the file ipfilter in two new files.
Thus, if the range ip proposed by the user it is between 0 and X, the application looks in the file ipfilter_a.txt.
Otherwise, if greater than X, seeking in the file Ipfilter_b.txt, minimizing the processing time.

Also, the application goes directly to the line that begins with the first octet of the range in question (140), to begin searching, and skipping the rest of lines, further minimizing the processing time.
Once app locate the container range, the application creates two new ranges, in order to exclude the ip range in question.
Obviously if the first octet does not exist, it means that range either does not exist, and the application inform about that, to the user.

I trust you will agree with me that do that, with notepad as described above, need for expertise, and we are talking about scheduling an application that be fully functional, for novice users, and for skilled users.
For this reason, it is preferable that the application handle this event, and that the user just has to fill in a few text boxes, and clicking a button in toolbar.
Obviously, if the user keeps these two files, the application will not have to create them again, for future operations that require their use. Minimizing the processing time.

PS. Both files are deleted when a new ipfilter file has been created,in order to get them updated, when the user or application requires.

Once the user has finished to include or exclude ranges, the following occurs:
a-Both files, they are merged again, in order to create a new ipfilter file, with changes included.
b-The application creates a backup of the replaced file. (If the results suit you, you can delete this backup)
c-Both files are maintained for future operations, that require them.

Quote

if you know c/c++ a little, i suggest you check eMule ip-filter code, it will help you with ip-check

Unfortunately this is not the case, at least currently.
However, if I had looked at the code that you suggest.
Anyway, we should bear in mind that emule handles ipfilter file already created, while IPCheck creates the file from different blacklists.
Although emule code includes functions that are helpful here, such as, split, merge, etc.
For that reazon and because ipfilter users suggestion, I decide avoid those feature.

In this case, obviously the ranges are adjacent, but different levels and description.
Notwithstanding the application will keep those ranges as they are, in order to keep the information related to them.
Anyway merge ranges here is needed, but emule already do that.
In this case emule code take lower value as level, such as:

140.239.255.017 - 140.239.255.046 , 060 , [BG]Bogon

Conclusion.
a- Ipfilter file retains all related information, to be viewed by the user when required.
b- emule extracts the necessary information from the ipfilter file.
c- emule merge/split ranges when needed.

And everybody happy here.

Thanks for the help.

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

Using threading.Sleep() and Level1.txt file, (approximate size 12mb).
Lowest cpu usage, but longer time process, (approximate 12 minute).
This is insane, and the only thing you can get through this, is a user thinking about suicide or worse.

Without Using threading.Sleep() and same file.
Hight cpu usage, but lowest time process, (approximate 2 minutes).I think user don't notice those 2 minutes.

obviously i meant don't use real threading code (creating/manipulating threads, shared objects, threaded io etc)
you can use whatever you already know as you see fit

Quote

Quote

some features can be automatic and adv. handling can be done in a different window if needed,
e.g: opening zip files, you don't have to add a window just to open a zipped ipfilter,
simply check the file's extension and operate accordingly, it's the same with saving zip (if you want to make it possible)

The application already does that.

yes, i know, what i meant was there's no need for the new window "Compress & Decompress list",
e.g: in Skinner you can open an existing skin for editing, if it's zipped, it is automatically extracted to the folder.
so in IpCheck, you'll have a button to allow importing an existing ipfilter and extract it if it's zipped
(you should also consider adding support to rar files if possible, since some mods use them, at least for decompressing)

Quote

Here I have used localized resource files.
For now, I've tested with four languages, such as, Spanish, English, French, and German.
In the case of French and German language, but I have only translated the text of three commands buttons, in order to create the appropriate resource files.
The reason to translate only three buttons, is because I do not trust much of the online translators, to translate whole application gui.
Of course this is provisional and may become permanent, if the users are encouraged to help with the translation, of the application interface.
Because I have no operating system with all these languages, what I do is change the anguage setting via code, in order to test if it works, and actually it works fine.

yes, .net is quite easier when it comes to localization, but you should check other complex langs like hebrew (since it's right-to-left), chinese/japanese/... because of their symbols.
i can help with the hebrew if you'd like

Quote

Quote

you can avoid spliting it, if the user wants to manually edit, he/she can use dedicated editors like notepad++

Here I am not totally agree with you, and I'll explain why...

i read you explanation, you are right about the scenario, but you could search much faster if you'd perform the following:
1. read the ipfilter into the memory and keep it there, it's faster than opening files over and over again
(true there's a memory overhead, but as i wrote above, you can convert the IPs from strings to uint32 to save memory, that's what eMule does)
2. use an advanced Abstract data type, e.g: Assoc. array/Hash table with the first octet of the start ip as the index, the class is called Hashtable in .net (there are other types but this is much easier in .net)
3. write functions that take advantage of the above assoc. array to search the ipfilter for ips, ranges, add new ranges, delete existing ranges, editing
and other functionalities needed to manipulate, access, save, open (from file) etc... the ipfilter list.

for the example you described, you'll benefit if you avoid splitting, the reason is that if the file is 20mb,
you perform massive i/o operations just to search for a single entry while in memory it'll be much faster,
the user will be able to do so within the application like you said, just move the option to the editing window instead of a new one

yes, .net is quite easier when it comes to localization, but you should check other complex langs like hebrew (since it's right-to-left), chinese/japanese/... because of their symbols.
i can help with the hebrew if you'd like

Yes I know , ¿Why you does not change text direction?, it would be so easier for me.
Of course I will need help, with the hebrew.

Quote

to save memory, that's what eMule does)
2. use an advanced Abstract data type, e.g: Assoc. array/Hash table with the first octet of the start ip as the index, the class is called Hashtable in .net (there are other types but this is much easier in .net)

Yes, in fact I had tried it, but using sortedlist.
But there is a problem here, since both reject duplicate keys, and a lot of ranges startwith same octect.
The Add method throws an exception if the new key is already in the hash table.

Imports System
Imports System.Collections
Imports System.IO
Imports System.Net
Module IPHandler
Public IpStartList As New Hashtable()
Public IpEndList As New Hashtable()
Public PathFile As String = Application.StartupPath
Public PathBLM_List As String = Path.Combine(PathFile, "BLM_List\")
Public PathUnZipDir As String = Path.Combine(PathBLM_List, "Unzipped Lists\")
Public PathFileValue As String = Path.Combine(PathUnZipDir, "Ipfilter.txt")
Sub Main(ByVal IpStart As String, ByVal IpEnd As String)
'Here caller sent both param.
Dim StdFormat As Integer() = {33, 9, -1}
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser(PathFileValue)
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = StdFormat
Dim CurrentRow As String
While Not MyReader.EndOfData
Try
CurrentRow = MyReader.ReadLine()
If Not CurrentRow.StartsWith("#") Then
IpStart = CurrentRow.Substring(0, 15)
IpEnd = CurrentRow.Substring(18, 15)
End If
Dim IP_Start As IPAddress = Nothing
Dim IP_End As IPAddress = Nothing
If Not IPAddress.TryParse(IpStart, IP_Start) Then Throw New Exception("Dirección IP no valida: " & IpStart)
If Not IPAddress.TryParse(IpEnd, IP_End) Then Throw New Exception("Dirección IP no valida: " & IpEnd)
Dim IPs() As Byte = IP_Start.GetAddressBytes 'get the octets, IP_Start
Dim IPe() As Byte = IP_End.GetAddressBytes 'get the octets, IP_End
Dim IPx, IPy, CounterValue As UInt32
'handle ip_Start
For x As Integer = 0 To 3
IPx = IPx Or (CUInt(IPs(x)) << (3 - x) * 8)
If Not IpStartList.ContainsKey(IPs(x)) Then
IpStartList.Add(IPs(0), IPx)
End If
Next
'handle Ip_End
For y As Integer = 0 To 3
IPy = IPy Or (CUInt(IPe(y)) << (3 - y) * 8)
If Not IpEndList.ContainsKey(IPe(y)) Then
IpStartList.Add(IPe(0), IPy)
End If
Next
If IPx = IPy Then
CounterValue += 1
Else
CounterValue += IPy - IPx
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & MyReader.ErrorLine & " is not valid and will be skipped.")
Finally
If MyReader Is Nothing Then
MyReader.Close()
MyReader.Dispose()
End If
End Try
End While
End Using
CompareIP(IpStartList)
End Sub
Public Function CompareIP(ByVal addrList As Hashtable) As UInt32
Dim valueStart As Integer = 0
Dim valueEnd As Integer = 0
Dim str As String = frmLists.txtSearchFor.Text.Trim
Dim userIP As IPAddress = Nothing
If Not IPAddress.TryParse(str, userIP) Then Throw New Exception("Dirección IP no valida: " & str)
Dim IPuser() As Byte = userIP.GetAddressBytes 'get the octets, IPuser
Dim IPux As UInt32
'handle ip_Start
For x As Integer = 0 To 3
IPux = IPux Or (CUInt(IPuser(x)) << (3 - x) * 8)
Next
For Each ds As DictionaryEntry In addrList
valueStart = ds.Key
Next ds
For Each de As DictionaryEntry In IpEndList
valueEnd = de.Key
Next de
If IPuser(0) >= valueStart <= valueEnd Then
' enter code further here, to search ip in range... currently using msg or Debug, for testing only
MsgBox(IPuser(0) & " - " & valueStart & " - " & valueEnd)
End If
Return str
Return valueStart
Return valueEnd
End Function
End Module

And in this case, hashtable is much faster than sortedlist, specially with larger data.
I wonder what am I missing here?

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

Yes I know , ¿Why you does not change text direction?, it would be so easier for me.

yeah sure, why the hell not, after thousands of years it's time for a change

Quote

...
Yes, in fact I had tried it, but using sortedlist.
But there is a problem here, since both reject duplicate keys, and a lot of ranges startwith same octect.
The Add method throws an exception if the new key is already in the hash table.

sorry, i mixed some things up a little (hazards of multitasking )...
what i thought about was this definition

(this is in C#, the code should be similar in VB)
ipfilterList is an array of sorted lists, each sorted list stores entries (class/structure of IPEntry, in green) for ips where the first octet of the start ip is used as the array's index.
in purple is the namespace to include, in red the type of index for the sorted list (this will be the start ip of the entry), in blue is the array definition.
i.e: for the next ipfilter

if not, you can use a simple sorted array for a while until we'll find a way to fix/improve this.

As said above, fixed using arraylist, storing each line as object, splitting them to get ipstart and ipend.
Coverting them to int32, implementing Icomparable and Ienumerable functions.
Using that to make searches, comparisons, including/excluding ranges, etc.
using the whole ip filter file , non split it, and so on.
Link to download, above in the main post.

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

saw the new version, nice work
the gui is much better now, much easier to work with.

a few things...:
* there's a bug in the include/explode IPs, you should change the input for the level
so it will only accept numbers without the commas (i'm guessing this was copied from the previous gui)

* ipcheck is unlikely to crash the computer (maybe the app itself can crash from bugs, but not the entire OS)

* you should release the installer and the binaries separately, with version in the file's name,
that way people will know which file is the latest release (similar to eMule releases and DL page)

* when you have a translation file ready, let me know and i'll translate to Hebrew
(changing the gui to allow right-to-left display is not a priority atm)

Quote

8 - You think that the code could be improved, and you know how to. (ty, Avi-3k )

a few things...:
* there's a bug in the include/explode IPs, you should change the input for the level
so it will only accept numbers without the commas (i'm guessing this was copied from the previous gui)

I'm not quite sure, I understand your point of view.
IPCheck go through all the values entered by the user, in order to validate them before starting the process.
If any of these values is not correct, or it does not exists, the application notifies the user through a dialog. In level case something like that:Please, enter a valid level value.
I have entered default values, to serve as a guide.
In the case of the level, the default value is ", 000 ,"
Note that you only have to enter the numeric value. For example in the case of level 030, you just have to change the middle zero by 3.

The user can enter the value he/she want, but one thing is certain, the process will not start until the user enters the correct values.
If you enter a value that does not correspond to an IP address, the process is carried out, and the application it will alert you.
I'm not quite sure if emule uses the comma, as a delimiter.

Quote

when you have a translation file ready, let me know and i'll translate to Hebrew

I'm working on it.

Quote

you should release the installer and the binaries separately, with version in the file's name,
that way people will know which file is the latest release (similar to eMule releases and DL page)

I agree, Although at the moment I prefer to wait a bit, if there are new changes.

Quote

(changing the gui to allow right-to-left display is not a priority atm)

I agree with you.

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

I'm not quite sure, I understand your point of view.
IPCheck go through all the values entered by the user, in order to validate them before starting the process.
If any of these values is not correct, or it does not exists, the application notifies the user through a dialog. In level case something like that:
Please, enter a valid level value.
I have entered default values, to serve as a guide.
In the case of the level, the default value is ", 000 ,"
Note that you only have to enter the numeric value. For example in the case of level 030, you just have to change the middle zero by 3.

The user can enter the value he/she want, but one thing is certain, the process will not start until the user enters the correct values.
If you enter a value that does not correspond to an IP address, the process is carried out, and the application it will alert you.
I'm not quite sure if emule uses the comma, as a delimiter.

yes, i saw that it works as you described, but some users won't understand that...
you should make is more simple, if you have a number, allow only digits,
you can also use the NumericUpDown controller to make input even easier:
that way you can limit the input to 0-255, you wouldn't need to validate the input
and it uses a common controller that users already understand, here's the code (in C#)

you can also use the NumericUpDown controller to make input even easier:

Done, but using CheckedListBox.
If we have the range 0-255, and assign values to the levels, the rest becomes possibilities for error.
Using CheckedListBox, the values are fixed and zero chance of being wrong.
Of course working with numeric values as you point to.

New release contain new features, such as, look up ip and fake files handler, coming soon.

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.

if you want the user to choose one value out of a set
(i.e: level from the group {0, 90, 115, 170} for example)
better use a combobox or radio buttons
checkedlistbox is very bad idea, since the user might think he can choose multiple values or doesn't have to select any

with the combobox (or radio buttons) you can use a default value that will be used (in this case 127)
and you can add description for each level so the user understand each level's relevance.
i still think NumericUpDown is the best choise (with a tooltip for description of levels) for both novice and adv. users...

checkedlistbox is very bad idea, since the user might think he can choose multiple values or doesn't have to select any

Several conditions must be met, so that a level value be considered, by the application.
a-The value must be selected and checked.
b-CheckedListBox1.SelectionMode = One. (Indicates the ListBox is to be single-select)
Above statement means that does not possible, two level values to be selected and cheKed, at same time.
c- Application take as level, the visible + selected + checked value.

And something else ....

Anyway combobox and radio buttons, both are good options.

PS: Actually adding more sources to download lists, but the app it is ready, and file for translation too.
Regards

Make your own ipfilter file, and manage fake files. Take in count, You are the best filter for emule.