Autor
|
Tema: IpToKml (Console Application Source) (Leído 8,447 veces)
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Buenas, Hace algunos días y por cosas que no vienen al caso, se me dió por crear una pequeña tool (aplicación de consola) que se encarga de parsear N fuentes de datos, extraer IP's, geocalizarlas y volcarlas a un archivo KML (este tipo de archivos puede cargarse en Google Earth y Google Maps entre otros). La idea de este post es justamente compartir la tool que he mencionado antes. Comentarios generales:- Aplicación de consola (como ya he mencionado).
- Utiliza la base de datos y las clases de Maxmind.
- Utiliza commandline para el parseo de los parámetros de línea de comandos.
- Extensible haciendo uso de MEF (Managed Extensibility Framework). Dado que la aplicación puede recibir datos de entrada de N fuentes, lo que hice fue crear un componente "parser". De este modo solo basta con crear un nuevo "parser" (dll) para que dinámicamente la aplicación los reconozca y pueda hacer uso de ellos (solamente deben de agregarse dentro de la carpeta "Extensions").
En el source van 4 parsers básicos que he desarrollado:
- Connections: identifica las conexiones actuales de la máquina, similar a netstat.
- Pcap: extrae IPs de un archivo de captura de red pcap (de Wireshark por ejemplo).
- PlainText: cualquier archivo que pueda ser reconocido como de texto.
- Web: obtiene IPs desde una url especificada.
Ejemplo de uso:C:\IpToKml\IpToKml\bin\Release>IpToKml.exe Available Parsers: + Connections + Pcap + PlainText + Web Usage: IpToKml.exe ParserName --help C:\IpToKml\IpToKml\bin\Release>IpToKml.exe web --help u, url Required. Url del sitio web. help Display this help screen. C:\IpToKml\IpToKml\bin\Release>IpToKml.exe web -u "http://www.malwaredomainlist.com/mdl.php?search=&colsearch=All&quantity=All" 21:44:39 Parsing Started 21:44:46 Parsing Completed 21:44:46 Finalizing Available IP Addresses : 2103 Unavailable IP Addresses : 9 Total IP Addresses : 2112 21:44:47 Output File C:\Dropbox\WEB_251020124439.kml C:\IpToKml\IpToKml\bin\Release>
Configuración:Para poder utilizarlo correctamente hay que cambiar dos settings en el config de la aplicación (IpToKml.exe.config) <?xml version="1.0"?> <configuration> <appSettings> <!--Ruta completa al archivo dat de la base de datos de IP--> <add key="GeoIpDb" value="C:\GeoIpDb\GeoLiteCity.dat"/> <!--Carpeta de salida para los KML generados--> <add key="KmlFolder" value="C:\Dropbox\"/> </appSettings> </configuration>
Descarga de código fuente: http://bit.ly/IpToKml (C# Visual Express 2010) Cualquier consulta y/o comentario ya saben Saludos
|
|
« Última modificación: 26 Octubre 2012, 22:21 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
r32
|
Se ve muy interesante aunque no manejo base de datos. Por curiosidad si se quisiera saber si la conexión se establece a través de un proxy, ¿lo volcaría desde la base de datos o se crearía un nuevo parser para ésto? No se como se hacen, me intriga aunque no sepa bien el manejo. No lo he probado pero puede ser que ese dato te lo de el geolocalizador...
Saludos.
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Se ve muy interesante aunque no manejo base de datos.
En realidad la base de datos de Maxmind esta en binario para que ocupe muchísimo menos espacio. En la aplicación hay unas clases específicas proporcionadas por esa misma empresa que permite hacer la consulta (son las que tienen el Copyright). Por curiosidad si se quisiera saber si la conexión se establece a través de un proxy, ¿lo volcaría desde la base de datos o se crearía un nuevo parser para ésto? No he entendido Por ejemplo, en el ejemplo que he dado antes lo que se hace es extraer las IP que figuran en esta página http://www.malwaredomainlist.com/mdl.php?search=&colsearch=All&quantity=All (tercera columna), buscar las coordenadas en la base de datos, y generar un KML con puntos por cada IP, si se quisiera el parser podría incluir más data (se puede incluir en la descripción de cada punto), pero he dejado los parsers de modo muy básico. Saludos
|
|
« Última modificación: 26 Octubre 2012, 18:29 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
r32
|
si se quisiera el parser podría incluir más data (se puede incluir en la descripción de cada punto), pero he dejado los parsers de modo muy básico.
Más o menos a eso me refería, cuando extrae la IP se podría verificar si la conexión se hace a través de un proxy anónimo por ejemplo, entonces se engañaría la geolocalización supongo. Quizás no sirva para nada, era sólo curiosidad, intentaré aprender más sobre éste tema. Gracias, saludos.
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Si, se podría hacer eso si el parser lo implementara Quizás no sirva para nada, era sólo curiosidad, intentaré aprender más sobre éste tema. Quizás la propia utilidad no sirva para nada a nivel de funcionalidad y solo me sirva a mi, la idea de compartir el código es que quienes desarrollan y quieren profundizar algunos temas puedan ver el código como ejemplo, se puede decir que tiene de todo: - Herencia y Polimorfismo
- Uso de settings
- Plugins
- Serialización
- LINQ
- Eventos y delegados
- Etc...
Saludos
|
|
« Última modificación: 26 Octubre 2012, 22:22 pm por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Cuando un proyecto esta hecho con las mejores practicas y formas de hacer la cosas, es bueno leerlo solo por el hecho de que contiene mucha información de pequeños detalles que al final puede ayudar en cualquier proyecto sin importar para lo que funcione. Normalmente este tipo de proyectos que solo uno hace para compartir, son de ejemplo debido al detalle que se le ha puesto al código, sino entonces lo hubiese lanzado como una aplicación. Excelente
|
|
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Es la idea , hay un solo detalle que tal vez me gustaría haber cuidado mejor, el manejo de excepciones , hubiese sido agregar un try/catch en el Program.cs a la hora de invocar los "parsers" Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
r32
|
Novlucker no me refería a que el código no sirviese , me refería a lo que yo te comentaba del proxy, que tampoco pueda servir de mucho ese dato, me entendiste mal. Por mi el codigo está muy bien, ya te lo comenté, lo descargué y miré los parsers, luego me surgió la duda de lo del proxy. Siento el mal entendido, saludos.
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Yo siento el mal entendido, en realidad entendí perfectamente lo que querías decir, pero en realidad yo quise llevar eso un poco más allá y por eso dije que "quizás la propia utilidad [...]", debí de agregar un "incluso" Si llegaste a ver algo del código, se aceptan comentarios o consultas si las hubiese Saludos
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
r32
|
Si que pude ver el código, te comento, al generar lo compila todo correctamente sin errores pero me salían 4 adverténcias referentes a:
CS0169: El campo 'LookupService.licensekey' no se usa nunca CS0414: El campo 'LookupService.dnsService' está asignado pero el valor no se usa nunca CS0414: El campo 'LookupService.STATE_BEGIN' está asignado pero el valor no se usa nunca CS0649: El campo 'IpToKml.Program.parsers' nunca se asigna y siempre tendrá el valor predeterminado null
Los tres primeros refieren a LookupService.cs, el último a Program.cs Los comentarios que dejaste en algunos códigos ayudan a orientarse un poco a los que no sabemos, se agradece eso.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
MOC, Music On Console
Noticias
|
wolfbcn
|
1
|
2,382
|
8 Agosto 2010, 20:01 pm
por Foxy Rider
|
|
|
Caracter Unicode en VB.Net Console Application
.NET (C#, VB.NET, ASP)
|
MicroHack
|
0
|
3,761
|
1 Febrero 2011, 14:20 pm
por MicroHack
|
|
|
Visual Basic For Application. Objeto "Application.FileSearch" en Office 2007/10
Programación Visual Basic
|
Aberroncho
|
3
|
6,304
|
26 Octubre 2011, 20:00 pm
por Aberroncho
|
|
|
[Duda] Guardar un string y mostrarlo en Console Application
Programación C/C++
|
Hurubnar
|
3
|
3,284
|
3 Diciembre 2011, 22:31 pm
por Hurubnar
|
|
|
WinWatcher (WinForms Application Source)
.NET (C#, VB.NET, ASP)
|
Novlucker
|
3
|
4,083
|
3 Diciembre 2012, 02:59 am
por Novlucker
|
|