P oyec o Fin de Ca e a
Ingenie ía de Telecomunicación
Fo ma o de Publicación de la Escuela Técnica
Supe io de Ingenie ía
Au o : F. Ja ie Payán Some
Tu o : Juan José Mu illo Fuen es
Dep. Teo ía de la Señal y Comunicaciones
Escuela Técnica Supe io de Ingenie ía
Uni e sidad de Se illa
Se illa, 2013
T abajo Fin de G ado
G ado en Ingenie ía de las Tecnologías de Teleco-
municación
Emulado de comunicaciones de sis emas de
con ol indus iales
Au o : Juan José Rosendo Alonso
Tu o : An onio Es epa Alonso
Dp o. Ingenie ía Telemá ica
Escuela Técnica Supe io de Ingenie ía
Uni e sidad de Se illa
Se illa, 2025
T abajo Fin de G ado
G ado en Ingenie ía de las Tecnologías de Telecomunicación
Emulado de comunicaciones de sis emas de
con ol indus iales
Au o :
Juan José Rosendo Alonso
Tu o :
An onio Es epa Alonso
Doc o
Dp o. Ingenie ía Telemá ica
Escuela Técnica Supe io de Ingenie ía
Uni e sidad de Se illa
Se illa, 2025
T abajo Fin de G ado: Emulado de comunicaciones de sis emas de con ol indus iales
Au o : Juan José Rosendo Alonso
Tu o : An onio Es epa Alonso
El ibunal nomb ado pa a juzga el abajo a iba indicado, compues o po los siguien es p o eso es:
P esiden e:
Vocal/es:
Sec e a io:
acue dan o o ga le la cali icación de:
El Sec e a io del T ibunal
Fecha:
Ag adecimien os
Alo la go de es os años de o mación, he enido la o una de con a con pe sonas inc eíbles, an o
quienes se han sumado ecien emen e como quienes lle an iempo a mi lado. Es e éxi o no es solo
mío, sino ambién de ellos:
A mis compañe os de clase. G acias po la ayuda, la compañía y los buenos momen os.
A mi amilia. G acias po el apoyo incondicional, el sac i icio y los ánimos.
A mis p o eso es. G acias po el conocimien o, la dedicación y la inspi ación.
A mi u o . G acias po la paciencia, el iempo y la con ianza.
A mi pa eja. G acias po el ca iño, la comp ensión y el apoyo cons an e.
G acias de co azón a odos los que habéis pa icipado en es a e apa. Sin oso os, no hab ía sido posible.
Juan José Rosendo Alonso
Se illa, 2024
I
Resumen
Es e T abajo de Fin de G ado se cen a en el desa ollo de un emulado de á ico Modbus, una he a-
mien a diseñada pa a simula la comunicación en e disposi i os indus iales. El p incipal obje i o
es p opo ciona un en o no segu o y p ác ico que pe mi a p oba , depu a y analiza sis emas basados en
el p o ocolo Modbus sin necesidad de in e ac ua con equipos eales, e i ando así iesgos asociados a su
manipulación.
El p oyec o aba ca desde el diseño de una a qui ec u a basada en con enedo es Docke has a la imple-
men ación de una in e az g á ica in ui i a. El sis ema u iliza el pa ón Modelo-Vis a-Con olado (MVC) y
es á compues o po es pa es p incipales: Co e, que ges iona la emulación median e Docke y Tcpdump;
Backend, enca gado de coo dina las acciones del sis ema; y F on end, que o ece al usua io la posibilidad
de con igu a escena ios de ed de mane a in e ac i a.
La solución desa ollada pe mi e emula múl iples disposi i os Modbus TCP, con igu ados como maes-
os o escla os, en una ed i ual. Se des acan uncionalidades como la alidación de con igu aciones de ed,
la pe sonalización del á ico emulado y la cap u a de paque es en o ma o PCAP pa a su análisis pos e io .
Además, el sis ema acili a la c eación, ca ga, gua dado y ejecución de escena ios de ed pe sonalizados.
Es e emulado no solo iene aplicaciones p ác icas en la segu idad y análisis de edes indus iales, sino que
ambién puede se u ilizado en en o nos educa i os y en la gene ación de da ase s pa a en ena algo i mos
de in eligencia a i icial des inados a la de ección de cibe a aques.
III
1 In oducción
1.1 Mo i ación
En el en o no de los sis emas indus iales mode nos, la cibe segu idad ha adqui ido una impo ancia c í-
ica debido al c ecien e núme o de amenazas a los que se en en an las in aes uc u as de con ol.
El p o ocolo Modbus, ampliamen e u ilizado en sis emas Indus ial Con ol Sys em (ICS), ue diseñado
o iginalmen e sin medidas de segu idad in ínsecas, lo que lo hace ulne able a una a iedad de a aques.
Es os a aques comp ome en los es a ibu os más impo an es de la in o mación: in eg idad, disponibilidad
y con idencialidad[1]. En pa icula , comp ome e la in o mación de es as comunicaciones pone en iesgo
in aes uc u as c í icas como lo es la ed eléc ica de España.
La necesidad de con a con he amien as que acili en la labo de los p o esionales de la cibe segu idad
es i al. Aquí es donde en a la emulación de á ico ealis a, donde se puede e alua la segu idad de una
ed an e cibe a aques pa a pos e io men e p epa a se adecuadamen e. Es e p oyec o busca llena ese acío,
p opo cionando un emulado que no solo acili e el análisis de una ed, sino que ambién pe mi a ealiza
p uebas p ác icas y ealis as en un en o no segu o y con olado.
La mo i ación úl ima de un p oyec o de es as ca ac e ís icas es la de gene a da ase s que pe mi an en e-
na algo i mos de in eligencia a i icial pa a la de ección de cibe a aques en sis emas ICS.
1.2 Obje i os
Siendo ex ensa el á ea de la cibe segu idad, se ha a ado de llega a un comp omiso donde el alcance y la
acilidad de uso no se ean comp ome idos. Po ello, se han es ablecido los siguien es obje i os:
1. Desa olla un so wa e que emule de o ma p ecisa la comunicación en e múl iples disposi i os Mod-
bus en su implemen ación T ansmission Con ol P o ocol (TCP).
2. Desa olla una in e az de usua io que pe mi a la con igu ación g á ica de los escena ios sin conoci-
mien o de la ecnología subyacen e.
En el p oyec o se han desa ollado más uncionalidades que las p opues as inicialmen e, desc i as en el
capí ulo de esul ados.
1
2 Conocimien os p e ios
Un p oyec o de es as ca ac e ís icas iene una al a ca ga de conocimien os p e ios an o en el ámbi o de
la ges ión de se icios como en el de la p og amación. En es e capí ulo se expond án los concep os
básicos necesa ios pa a en ende el p oyec o.
2.1 Modbus
Modbus es un p o ocolo de comunicación o iginado en el año 1979 po Modicon (ac ualmen e pa e de Sch-
neide Elec ic), diseñado inicialmen e pa a la au oma ización indus ial y la in e conexión de disposi i os
en sis emas de con ol dis ibuido. Su ámbi o de aplicación eside en la ges ión de disposi i os en áb icas y
plan as indus iales.
A lo la go de su his o ia, se han p opues o di e sas soluciones pa a mejo a la baja segu idad inhe en e al
p o ocolo, como la implemen ación de capas de ci ado y au en icación. Sin emba go, debido a la iloso ía
"si unciona no lo oques" y a la necesidad de man ene la compa ibilidad con equipos exis en es, es as
soluciones no es án en uncionamien o. [2]
Modbus iene es a ian es p incipales: Modbus Remo e Te minal Uni (RTU), Modbus TCP, y Modbus
Use Da ag am P o ocol (UDP), cada una adap ada a di e en es en o nos de comunicación. Modbus RTU
u iliza una comunicación se ie, mien as que Modbus TCP y Modbus UDP ope an sob e edes In e ne
P o ocol (IP), pe mi iendo una in eg ación más sencilla en edes mode nas.[3]
Modbus se basa en un pa adigma de comunicación maes o-escla o, donde un disposi i o maes o (gene-
almen e un con olado ) en ía comandos a uno o a ios disposi i os escla os (senso es, ac uado es, e c.),
que esponden a es as solici udes de acue do con su unción especí ica.[4]
En es e pa adigma el maes o es el que inicia la comunicación, y el escla o esponde a las solici udes
del maes o. En algunos p o ocolos, como es el caso de DNP3 o IEC 60870-5-104 (comúnmen e conocido
como IEC 104), se pe mi e que además el escla o ac ualice al maes o del es ado de sus egis os sin una
solici ud explíci a p e ia.
La es uc u a de la cabece a de Modbus se mues a en la Figu a 2.1, donde se des acan los campos de la
cabece a ijos. Los campos a iables dependen del Func ion Code (FC) que se es é u ilizando, añadiendo
si lo necesi a un campo que e e encie un alo (1 By e) o una di ección de egis o (2 By es). Dado que el
obje i o de es e apa ado es in oduci la cabece a y no explica la en p o undidad se dejan de lado el es o
de campos dependien es del FC que puedan apa ece en la cabece a.
Figu a 2.1 Campos de la cabece a del p o ocolo Modbus.
3
4Capí ulo 2. Conocimien os p e ios
Exis en di e sos FC implemen ados en el p o ocolo Modbus, cada uno con una unción especí ica. En la
Tabla 2.1 se mues an algunos de los FC más comunes.
Tabla 2.1 Códigos de unción Modbus.
Func ion Code Nomb e Desc ipción
01 Read Coils Lee el es ado de las bobinas en el ango especi icado.
02 Read Disc e e Inpu s Lee el es ado de las en adas digi ales en el ango especi icado.
03 Read Holding Regis e s Lee el con enido de los egis os de e ención.
04 Read Inpu Regis e s Lee el con enido de los egis os de en ada.
05 W i e Single Coil Esc ibe un alo en una sola bobina.
06 W i e Single Regis e Esc ibe un alo en un solo egis o.
15 W i e Mul iple Coils Esc ibe alo es en múl iples bobinas.
16 W i e Mul iple Regis e s Esc ibe alo es en múl iples egis os.
43 Read De ice In o ma ion Lee in o mación especí ica del disposi i o, como iden i icado es.
El p o ocolo de ine cua o ipos de egis os, los cuales ienen un espacio de di ecciones dis in o y iene
dado po el FC, es o es, dos egis os pueden es a en la misma di ección mien as sean de dis in o ipo.
Los cua o ipos de egis os se di e encian po su unción y acceso:
•Coil (Bobina): Regis os de ipo bi diseñados pa a ope aciones de salida. Pe mi en lec u a (FC 1)
y esc i u a (FC 5 pa a un bi o FC 15 pa a múl iples bi s). Se u ilizan ípicamen e pa a con ola
ac uado es como elés o ál ulas.
•Disc e e Inpu (En ada Disc e a): Regis os de solo lec u a (FC 2) que ep esen an es ados bina ios
de en adas ísicas, como senso es digi ales o in e up o es. No pe mi en esc i u a.
•Holding Regis e (Regis o de Re ención): Regis os de 16 bi s pa a almacena da os numé icos.
Son accesibles pa a lec u a (FC 3) y esc i u a (FC 6 pa a un egis o o FC 16 pa a múl iples). Se
emplean en pa áme os con igu ables como se poin s o alo es de con ol.
•Inpu Regis e (Regis o de En ada): Regis os de 16 bi s de solo lec u a (FC 4), usados pa a da os
analógicos como mediciones de empe a u a, p esión o alo es de senso es que no equie en esc i u a.
Es a di isión ga an iza cohe encia uncional: los egis os Inpu (2 y 4) son de solo lec u a pa a moni o-
ización, mien as los Holding yCoils (3 y 1) pe mi en con igu ación ac i a. La abla 2.2 esume los FCs
asociados a cada ipo de egis o.
Tabla 2.2 Tipos de Regis os en Modbus.
Tipo Tipo Da o FC lec u a FC esc i u a
Coil Bi 1 5, 15
Disc e e Inpu Bi 2 -
Holding Regis e 16-bi Wo d 3 6, 16
Inpu Regis e 16-bi Wo d 4 -
Un aspec o c í ico es la codi icación de da os en los egis os de 16 bi s. Mien as los Holding eIn-
pu Regis e s almacenan alo es en o ma o bina io (en e os sin signo, complemen o a dos o pun o lo-
an e según es ánda IEC 61131-3), los Coils yDisc e e Inpu s usan alo es booleanos (0x0000=Falso,
0xFF00=Ve dade o). Es a es uc u a pe mi e in e ope abilidad en e disposi i os median e una semán ica
p edecible.
2.2 Docke
Docke es una ecnología desa ollada po Docke Inc. en el año 2013 cuyo in es acili a la c eación, des-
pliegue y ejecución de aplicaciones median e con enedo es. Los con enedo es pe mi en a los desa ollado es
empaque a una aplicación con odas sus dependencias en un en o no aislado y consis en e, mejo ando la
2.2 Docke 5
po abilidad y la e iciencia.
En es e con ex o se habla de imágenes, que son plan illas inmu ables a pa i de las cuales se ins ancian los
con enedo es. Una semejanza ápida se ía compa a las imágenes y con enedo es a p og amas y p ocesos,
espec i amen e: un con enedo es una imagen en ejecución. Pa a la ges ión de imágenes con amos con los
comandos p incipales mos ados en la abla 2.3.
Tabla 2.3 Comandos comunes pa a la ges ión de imágenes en Docke .
Comando Uso
docke pull Desca ga una imagen desde un eposi o io
docke build Cons ui una imagen a pa i de un Docke ile
docke images Lis a odas las imágenes locales
docke mi Elimina una imagen local
Pa a el ap o isionamien o de imágenes se puede o bien eusa una ya exis en e o bien c ea la. La c eación
de una imagen pe sonalizada se ealiza median e un Docke ile, que es un a chi o de ex o con ins ucciones
que desc iben cómo cons ui la imagen. Las ins ucciones más impo an es que se pueden usa den o de
un Docke ile es án ecogidos en la abla 2.4.
Tabla 2.4 Ins ucciones comunes de Docke ile.
Ins ucción Uso
FROM Especi ica la imagen base pa a la cons ucción
RUN Ejecu a comandos en el con enedo du an e la cons ucción
COPY Copia a chi os/di ec o ios al sis ema de a chi os del con enedo
CMD Especi ica el comando po de ec o a ejecu a
EXPOSE Decla a el pue o en el que la aplicación escucha á
ENV Es ablece a iables de en o no
Un Docke Regis y es un se icio cen alizado que pe mi e almacena , ges iona y dis ibui imágenes
Docke . Es as imágenes pueden se públicas o p i adas, dependiendo de las necesidades del p oyec o. El
egis o más conocido es Docke Hub, que o ece una g an a iedad de imágenes p econs uidas lis as pa a
su uso. Sin emba go, ambién es posible con igu a egis os p i ados, como Amazon Elas ic Con aine Re-
gis y (ECR) o Azu e Con aine Regis y (ACR), pa a man ene un con ol más es ic o sob e el acceso y la
dis ibución de las imágenes. Los egis os acili an la colabo ación en e equipos al p opo ciona un epo-
si o io cen alizado desde donde se pueden desca ga las imágenes necesa ias, y además, sopo an p ocesos
de CI/CD al in eg a se ácilmen e en los lujos de desa ollo. A modo de esumen se incluye la igu a 2.2
2.2.1 Docke Compose
Docke Compose es una he amien a de Docke que acili a la ges ión de los con enedo es. Median e un
a chi o YAML Ain’ Ma kup Language (YAML) de nomb e po de ec o docke -compose.yml, se puede
especi ica cómo deben se con igu ados y elacionados a ios se icios, simpli icando el p oceso de des-
pliegue y ges ión de aplicaciones complejas.
YAML es un o ma o de se ialización de da os ácil de lee y esc ibi . En es e caso, el YAML debe á ene
obliga o iamen e un campo se ices y opcionalmen e si así lo equie e, o o de ne wo ks y olumes.
Se ices
El bloque se ices de ine los dis in os se icios que o man la aplicación. Cada se icio ep esen a un con-
enedo que puede inclui con igu aciones como la imagen a usa , a iables de en o no, pue os expues os,
olúmenes, y comandos a ejecu a .
6Capí ulo 2. Conocimien os p e ios
Figu a 2.2 A qui ec u a de Docke .
Ne wo ks
El bloque ne wo ks pe mi e de ini edes pe sonalizadas pa a acili a la comunicación en e se icios de
o ma aislada. Es o o ece un mayo con ol sob e la conec i idad en e los con enedo es y pe mi e c ea
en o nos más segu os y o ganizados.
Volumes
El bloque olumes pe mi e de ini olúmenes que pueden se u ilizados po los se icios pa a almacena
da os de mane a pe sis en e. Es o es ú il cuando es necesa io man ene da os más allá del ciclo de ida
de un con enedo . Los olúmenes pueden se con igu ados pa a mapea una pa e especí ica del sis ema
de a chi os del an i ión a una ubicación den o del con enedo , asegu ando que los da os pe manezcan
accesibles incluso si los con enedo es se eliminan o einician.
Ejemplo
Un ejemplo de un docke -compose.yml con dos se icios con poca con igu ación se ía el desc i o en 2.1.
Aquí se de inen dos se icios web ydb. El p ime o usa la imagen nginx:la es y expone el pue o 80 del
con enedo en el pue o 8080 del an i ión. El segundo usa la imagen pos g es:la es y expone el pue o 5432
del con enedo en el pue o 5432 del an i ión. Además, se de inen a iables de en o no pa a con igu a la
base de da os.
Código 2.1 Ejemplo básico docke -compose.yml.
1se ices :
2web:
3image: nginx: la es
4po s :
5−"8080:80"
6
7db:
8image: pos g es : la es
9en i onmen :
10 POSTGRES_USER: exampleuse
11 POSTGRES_PASSWORD: examplepass
12 POSTGRES_DB: exampledb
13 po s :
14 −"5432:5432"
2.3 Pa ón MVC 7
2.3 Pa ón MVC
El pa ón Modelo-Vis a-Con olado (MVC) es una a qui ec u a de so wa e u ilizada ampliamen e en el
desa ollo de aplicaciones web, mó iles y de esc i o io [5]. Su p incipal obje i o es o ganiza el código
en es componen es cla amen e di e enciados: Modelo, Vis a y Con olado . Es o p omue e la sepa ación
de esponsabilidades, pe mi iendo mejo a la modula idad, escalabilidad, man enimien o y eu ilización del
código.
Cada uno de es os componen es desempeña un ol undamen al den o del pa ón:
1. Modelo: Rep esen a los da os y la lógica de negocio de la aplicación. Se enca ga de ealiza cálculos,
ges iona la pe sis encia de da os (po ejemplo, median e acceso a bases de da os) y p ocesa las eglas
de negocio. El Modelo debe es a desacoplado de los de alles especí icos de p esen ación y en oca se
exclusi amen e en la uncionalidad de la aplicación.
2. Vis a: Es la capa esponsable de la p esen ación de los da os y de la in e acción con el usua io. Mues a
la in o mación p o enien e del modelo a a és de in e aces g á icas o isuales, ya sea en na egado es
web, aplicaciones de esc i o io o disposi i os mó iles. La Vis a debe es a diseñada pa a minimiza
los p oblemas de in eg ación y acili a la de inición de la in e az de usua io den o del sis ema.
3. Con olado : Ac úa como in e media io en e la Vis a y el Modelo. P ocesa las pe iciones del usua io,
las in e p e a y las aduce en acciones que in e ac úan con el Modelo. Pos e io men e, el Con olado
oma la espues a del Modelo y la pasa a la Vis a, asegu ando que los da os sean p esen ados co ec-
amen e.
Figu a 2.3 Aplicación del pa ón Modelo-Vis a-Con olado .
2.4 REST API
En el con ex o de aplicaciones web mode nas, Rep esen a ional S a e T ans e (REST) es un es ilo a -
qui ec ónico ampliamen e adop ado pa a diseña se icios web que pe mi an la comunicación en e
sis emas dis ibuidos. REST no es un p o ocolo, sino un conjun o de buenas p ác icas que p omue en la
uni o midad en la comunicación en e componen es.[6]
REST se basa en el uso de es ánda es web, como Hype ex T ans e P o ocol (HTTP) o Cons ained
Applica ion P o ocol (CoAP), pa a la ans e encia de ecu sos iden i icados po Uni o m Resou ce Iden i ie
(URI)s. Cada ecu so es ep esen ado en o ma os es anda izados como Ja aSc ip Objec No a ion (JSON)
o Ex ensible Ma kup Language (XML), acili ando la in e ope abilidad en e sis emas he e ogéneos. Las
p incipales ca ac e ís icas de una REST Applica ion P og amming In e ace (API) son:
•Clien e-Se ido : La a qui ec u a se di ide en dos pa es independien es, el clien e y el se ido , que
in e ac úan a a és de una in e az bien de inida.
8Capí ulo 2. Conocimien os p e ios
•In e az uni o me: Los ecu sos son accedidos a a és de un conjun o de ope aciones C ea e, Read,
Upda e, Dele e (CRUD).
•Sin es ado: Cada pe ición al se ido debe con ene oda la in o mación necesa ia pa a p ocesa la,
sin depende de un es ado almacenado en e pe iciones.
El diseño de una REST API HTTP e ec i a es á guiado po buenas p ác icas que incluyen:[7]
•Diseño o ien ado a ecu sos: Cada URI debe ep esen a un ecu so especí ico, nomb ado con sus-
an i os (po ejemplo, /usua ios o/pedidos).
•Uso adecuado de los mé odos HTTP: Como se de alla en la abla 2.5, los mé odos HTTP es án
asociados a ope aciones CRUD es anda izadas.
•Manejo de códigos de es ado HTTP: Las espues as deben inclui códigos de es ado como 200 OK,
404 No Found o500 In e nal Se e E o pa a in o ma al clien e sob e el esul ado de la
ope ación.
Tabla 2.5 Equi alencia en e ope aciones CRUD y mé odos HTTP.
Ope ación CRUD Mé odo HTTP Uso
C ea e POST C ea un nue o ecu so
Read GET Recupe a in o mación de un ecu so exis en e
Upda e PUT Modi ica un ecu so exis en e
Dele e DELETE Elimina un ecu so exis en e
En el con ex o del pa ón MVC, las REST APIs suelen desempeña un papel undamen al al ac ua como
in e az en e el Modelo y la Vis a. Po ejemplo, cuando un usua io in e ac úa con la in e az de una apli-
cación web, las pe iciones gene adas po la Vis a (no malmen e u ilizando Asynch onous Ja aSc ip And
XML (AJAX) o simila ) son en iadas al Con olado . Es e, a su ez, in e ac úa con el Modelo pa a ob e-
ne o modi ica da os y de uel e una espues a es uc u ada (en o ma o JSON o XML) que es p ocesada y
mos ada po la Vis a.
2.4.1 Ejemplo p ác ico de REST API
Un ejemplo ípico de REST API pa a la ges ión de usua ios pod ía inclui un endpoin pa a ob ene in o -
mación de un usua io especí ico:
1GET /usua ios/123 HTTP/1.1
2Hos : api.ejemplo.com
3Au ho iza ion: Bea e oken123
4
5HTTP/1.1 200 OK
6Con en -Type: applica ion/json
7
8{
9"id": 123,
10 "nomb e":"Juan Pé ez",
11 "email":"[email p o ec ed]"
12 }
En es e ejemplo, el clien e ealiza una pe ición GET al ecu so /usua ios/123 pa a ob ene in o mación
de un usua io con el iden i icado 123. El se ido esponde con un código de es ado 200 y un cue po en
o ma o JSON que con iene los da os solici ados.
2.4.2 E o es comunes y desa íos en REST API
A pesa de su simplicidad, el diseño de una REST API p esen a a ios e os:
•Uso inco ec o de mé odos HTTP: Es ecuen e obse a endpoin s que no espe an las con enciones
REST, como /ob ene Usua io en luga de /usua ios.
2.4 REST API 9
•Endpoin s poco in ui i os: Diseña URLs cla as y o ien adas a ecu sos puede se un desa ío, espe-
cialmen e en aplicaciones complejas.
•Au en icación y au o ización: La ges ión de pe misos a a és de sis emas como OAu h2 o okens
JSON Web Token (JWT) equie e una implemen ación cuidadosa.
Abo da es os p oblemas es undamen al pa a ga an iza que las APIs sean áciles de usa , man ene y
escala . Además, las buenas p ác icas en el diseño REST con ibuyen a alinea el desa ollo con los p incipios
del pa ón MVC, p omo iendo la modula idad y la cla idad en la a qui ec u a del sis ema.
16 Capí ulo 4. Diseño e Implemen ación de la Solución
Figu a 4.1 Diag ama de componen es: Backend y Co e.
en el di ec o io s c.
Es a es uc u a modula no solo pe mi e una ácil ex ensión del sis ema pa a sopo a nue os p o ocolos
y escena ios, sino que ambién acili a la implemen ación y el uso en di e sos en o nos g acias a la combi-
nación de Docke y una in e az web in ui i a.
4.4 Co e
El Co e es el componen e más impo an e del sis ema, ya que es el enca gado de da la uncionalidad del
sis ema. En es e desa ollo se le ha dado mucha impo ancia a la cla idad y a la modula idad del código, lo
cual ha acili ado la codi icación y depu ación de e o es.
Con la es uc u a iden i icada, la implemen ación se e eno memen e acili ada. Es a ez amos a empeza
desde el p incipio, especi icando la implemen ación y jus i icando las decisiones omadas.
4.4.1 Docke Compose
El p ime paso es de ini el o ma o que end á el iche o docke -compose.yml de nues o p oyec o. A g andes
asgos cons a de dos secciones ele an es pa a es e p oyec o: ne wo ks yse ices Aho a se a a en a en
de alle en cada sección.
Ne wo ks
Es e bloque iene como unción ubica a odos los con enedo es en la misma sub ed pa a que cuando se
cap u e el á ico, enga las di ecciones MAC e IP co ec as.
Un ejemplo de de inición se ía el expues o en el lis ado 4.1.
Código 4.1 Ejemplo de ne wo k.
1ne wo ks:
2icscommemula o :
3ipam:
4con ig :
5−subne : 192.168.45.0/24
6name: icscommemula o
4.4 Co e 17
La con igu ación es bas an e di ec a e in ui i a. Ne wo ks es la palab a ese ada en el docke -compose.yml
que si e pa a comenza la lis a de edes de inidas.
En es e caso solo hay una con el nomb e icscommemula o , que se gua da á con dicho nomb e. Ipam (IP
Add ess Managemen )[14], especi ica que la sub ed que se quie e es la 192.168.45.0/24.
Se ices
Es e es el bloque p incipal de un iche o docke -compose.yml. En él se de inen los se icios que se an a
lanza . En nues o caso, los con enedo es que emula án los disposi i os Modbus. Cada se icio iene un
nomb e, que se á el iden i icado del nodo, y una se ie de con igu aciones.
En nues o caso hace al a con igu a odos los con enedo es de o ma especí ica. Se mues a la con igu-
ación de un nodo maes o en el lis ado 4.2.
Código 4.2 Ejemplo de nodo maes o.
1modbus_mas e _0:
2build :
3con ex : ./ p o ocols /modbus/mas e
4docke ile : Docke ile .mas e
5con aine _name: modbus_mas e _con aine _0
6depends_on:
7modbus_sla e_0:
8condi ion : se ice_heal hy
9modbus_sla e_1:
10 condi ion : se ice_heal hy
11 en i onmen :
12 −PYTHONUNBUFFERED=1
13 image: modbus_mas e _image
14 ne wo ks:
15 icscommemula o :
16 ip 4_add ess: 192.168.45.10
17 mac_add ess: E4:A8:DF:D1:11:0A
18 olumes:
19 −/ mp/ICSCommEmula o /mas e s/0/mas e .cs :/app/mas e .cs : o
En el lis ado se iden i ican muchos campos que se deben explica :
•modbus_mas e _0: Es e es el nomb e del se icio. En es e caso, se a a del nodo maes o Modbus.
•build:
– con ex : Especi ica el di ec o io de con ex o pa a la cons ucción de la imagen Docke . En es e
caso, es ./p o ocols/modbus/mas e .
– docke ile: Indica el a chi o Docke ile a u iliza pa a cons ui la imagen. Aquí se usa Docke ile.mas e .
•con aine _name: De ine el nomb e del con enedo . En es e ejemplo, es modbus_mas e _con aine _-
0.
•depends_on: Especi ica las dependencias del se icio. El nodo maes o depende de los nodos escla os
modbus_sla e_0 ymodbus_sla e_1, y solo se inicia á cuando es os es én en un es ado saludable
(se ice_heal hy).
•en i onmen : De ine las a iables de en o no pa a el con enedo . Aquí se es ablece PYTHONUNBUFFERED=1,
lo que desac i a el almacenamien o en bú e de la salida es ánda de Py hon.
•image: Especi ica la imagen Docke a u iliza . En es e caso, es modbus_mas e _image.
•ne wo ks: Con igu a la ed a la que se conec a á el con enedo . En es e ejemplo, se conec a a la
ed icscommemula o con una di ección IP 4 especí ica (192.168.45.10) y una di ección MAC
(E4:A8:DF:D1:11:0A).
• olumes: Mon a un olumen en el con enedo . En es e caso, se mon a el a chi o de con igu ación del
nodo maes o.
También con amos con la con igu ación de un escla o, la cual se mues a en en el lis ado 4.3
Código 4.3 Ejemplo de nodo escla o.
1modbus_sla e_0:
18 Capí ulo 4. Diseño e Implemen ación de la Solución
2build :
3con ex : ./ p o ocols /modbus/sla e
4docke ile : Docke ile . sla e
5con aine _name: modbus_sla e_con aine _0
6en i onmen :
7−PYTHONUNBUFFERED=1
8expose:
9−’502’
10 heal hcheck :
11 in e al : 10s
12 e ies : 3
13 s a _pe iod : 10s
14 es :
15 −CMD−SHELL
16 − es − /app/app_ unning.lock
17 imeou : 5s
18 image: modbus_sla e_image
19 ne wo ks:
20 icscommemula o :
21 ip 4_add ess: 192.168.45.101
22 mac_add ess: E4:A8:DF:D1:11:1B
23 olumes:
24 −/ mp/ICSCommEmula o /sla es/0/sla e.yaml:/app/ sla e .yaml: o
Las di e encias con el nodo maes o son:
•depends_on: El nodo escla o no iene dependencias especi icadas, mien as que el nodo maes o
depende de odos los nodos escla os.
•expose: El nodo escla o expone el pue o 502, pue o es ánda de Mobus, lo que pe mi e que o os
se icios se comuniquen con él a a és de es e pue o. El nodo maes o no iene es a con igu ación.
•heal hcheck: El nodo escla o incluye una con igu ación de e i icación de salud (heal hcheck) que
de ine cómo y cuándo se e i ica el es ado del con enedo . Es a con igu ación incluye:
– in e al: El in e alo de iempo en e e i icaciones, en es e caso, 10 segundos.
– e ies: El núme o de in en os allidos an es de conside a que el con enedo no es á saludable,
aquí son 3 in en os.
– s a _pe iod: El pe íodo de iempo du an e el cual las e i icaciones allidas no cuen an hacia
el lími e de in en os, en es e caso, 10 segundos.
– es : El comando que se ejecu a pa a e i ica el es ado del con enedo . Aquí se e i ica la exis-
encia del a chi o /app/app_ unning.lock.
– imeou : El iempo máximo que se espe a pa a que el comando de e i icación se comple e, en
es e caso, 5 segundos.
• olumes: El nodo escla o mon a un a chi o de con igu ación di e en e (sla e.yaml) en compa ación
con el nodo maes o (mas e .cs ).
4.4.2 Docke Images
En la sección an e io se ha explicado cuál a a se el o ma o del docke -compose. Aquí se a a en a en
de alle en las dos imágenes desa olladas en el p oyec o.
Como se obse a en la igu a 4.1, enemos un di ec o io donde se encuen a el p o ocolo Modbus. Den o
de es e di ec o io, se encuen an dos subdi ec o ios, uno pa a el maes o y o o pa a el escla o. En cada uno
de es os di ec o ios se encuen a un Docke ile que se enca ga de cons ui la imagen y un sc ip p incipal.
Docke iles
A in de ene la mayo can idad de con enedo es co iendo, es os Docke iles se han diseñado pa a gene a
imágenes del meno amaño posible, po lo que se han seguido las ecomendaciones de Docke pa a ello. Se
ha minimizado el espacio ocupado en disco po las imágenes, siendo de 52.7MB y 55.3MB pa a el maes o
y el escla o, espec i amen e. Es o es in e io a o as imágenes que se pueden encon a en Docke Hub, con
amaños de en e 60 y 100 MB. En el lis ado 4.4 se mues a el Docke ile del nodo maes o y en el lis ado
4.5 el del nodo escla o.
4.4 Co e 19
Código 4.4 Docke ile del maes o.
1# Use an o icial Py hon un ime as a pa en image
2FROM py hon:3.10.0-alpine
3
4# Se he wo king di ec o y in he con aine o /app
5WORKDIR /app
6
7# Add he main sc ip in o he con aine a /app
8COPY ./mas e .py /app
9
10 # Ins all any needed packages speci ied in equi emen s. x
11 RUN pip ins all --no-cache-di pymodbus
12
13 # Run mas e .py when he con aine launches
14 ENTRYPOINT ["py hon","mas e .py"]
Código 4.5 Docke ile del escla o.
1# Use an o icial Py hon un ime as a pa en image
2FROM py hon:3.10.0-alpine
3
4# Se he wo king di ec o y in he con aine o /app
5WORKDIR /app
6
7# Add he main sc ip in o he con aine a /app
8COPY ./sla e.py /app
9
10 # Ins all any needed packages
11 RUN pip ins all --no-cache-di pymodbus pyyaml
12
13 # Run sla e.py when he con aine launches
14 ENTRYPOINT ["py hon","sla e.py"]
Ambas imágenes son muy pa ecidas, ya que solo se di e encian en el sc ip que se copia y en las lib e ías
que se ins alan. En el caso del nodo maes o, solo se necesi a la lib e ía pymodbus, mien as que en el nodo
escla o se necesi a ambién pyyaml.
Sc ip s
El sc ip del maes o es muy sencillo, ya que solo se enca ga de en ia mensajes Modbus. Esos mensajes
es án desc i os en un a chi o CSV que se mon a en el con enedo . En el lis ado 4.6 se mues a un ejemplo
de es e a chi o.
Código 4.6 Ejemplo de mas e .cs .
1coun , unc ion_code,in e al,ip,po , ecu en ,sla e_id,s a _add ess, imes amp, alues
23,3,5,192.168.45.100,502,T ue,1,0,0,[]
32,1,4,192.168.45.100,502,T ue,1,0,1,[]
41,3,5,192.168.45.101,502,T ue,2,0,0,[]
53,1,4,192.168.45.101,502,T ue,2,0,1,[]
El sc ip del escla o equie e algo más de con igu ación, ya que se iene que con igu a la espues a a los
mensajes del maes o. Es os mensajes es án desc i os en un a chi o YAML que se mon a en el con enedo .
En el lis ado 4.7 se mues a un ejemplo de es e a chi o.
Código 4.7 Ejemplo de sla e.yaml.
1coils :
2 ype: sequen ial
3 alues :
4−1
5−0
6−1
7disc e e_inpu s :
8 ype: sequen ial
9 alues : ’’
10 holding_ egis e s :
11 ype: sequen ial
12 alues :
13 −3
14 iden i y :
15 majo _mino _ e ision: ’2.5’
16 model_name: MagicMas e 3000
20 Capí ulo 4. Diseño e Implemen ación de la Solución
17 p oduc _code: TF98765
18 p oduc _name: Con olado de Au oma izacin Mgica
19 use _applica ion_name : Con ol de P ocesos Mgicos
20 endo _name: TechnoFan asy Inc.
21 endo _u l : h ps :// www. echno an asy.com
22 inpu _ egis e s :
23 ype: sequen ial
24 alues : ’’
25 ip: 192.168.45.101
26 mac: E4:A8:DF:D1:11:1B
27 po : 502
28 sla e_id : 2
El sc ip di e encia en e egis os de inidos de o ma secuencial o dispe sa. En el caso de los egis os
secuenciales, se especi ica el alo de cada uno de ellos. En el caso de los egis os dispe sos, se c ea un
dicciona io "di ección: alo ".
La lib e ía u ilizada pa a ges iona los mensajes de Modbus en Py hon (Pymodbus) p esen a un compo -
amien o indeseado al de ini los egis os en el escla o: los índices empiezan en 1 en luga de en 0. Es
deci , cuando se gua da un egis o con índice N (posición N) en Py hon, lo es a á gua dando en el índice
N (posición N-1) en Pymodbus. Al ecupe a los ecupe a lo espe ado (si se le pide M, ecupe a M+1) De
es e modo, a la ho a de gua da los egis os hay que ene en cuen a es e de alle e inc emen a en uno la
di ección de los egis os.
4.4.3 Módulo docke _compose_gene a o .py
Es e módulo iene un papel muy impo an e, que es pasa de la con igu ación del escena io, desc i o más
adelan e en 4.5.2, a un iche o docke -compose.yml. Pa a ello se ha conside ado ap opiada una p og amación
o ien ada a obje os en es e módulo.
La in e az con el módulo es muy sencilla, ya que solo se necesi a c ea una ins ancia de la clase Doc-
ke ComposeGene a o y llama al mé odo pa se con la con igu ación del escena io. A con inuación, se
de allan los componen es y uncionalidades cla e del módulo:
Clase Docke ComposeGene a o
La clase Docke ComposeGene a o es la enca gada de gene a y alida a chi os de con igu ación de
Docke Compose. Los a ibu os p incipales de la clase incluyen:
•se ices (dic ): Almacena la con igu ación de los se icios.
•ne wo ks (dic ): Almacena la con igu ación de las edes.
•p o ocol (s ): Nomb e del p o ocolo u ilizado en la con igu ación de Docke Compose.
•ip_base (ipadd ess.IP 4Add ess): Di ección IP base pa a la ed.
•pa h (s ): Ru a al a chi o Docke Compose.
•con ig_pa h (s ): Ru a a los a chi os de con igu ación.
•las _ip (ipadd ess.IP 4Add ess): Úl ima di ección IP asignada pa a la asignación dinámica.
Mé odos de la Clase
•__ini __: Inicializa la clase con el p o ocolo, la u a del a chi o y la u a de con igu ación.
•add_ne wo k: Añade una ed a la con igu ación de Docke Compose.
•add_node: Añade un nodo (se icio) a la con igu ación de Docke Compose.
•gene a e: Gene a el a chi o YAML de Docke Compose.
• alida e: Valida el a chi o de Docke Compose gene ado.
• alida e_ ile: Mé odo es á ico pa a alida un a chi o de Docke Compose dado.
•_ alida e_ ile: Mé odo es á ico auxilia pa a alida un a chi o de Docke Compose u ilizando
la CLI de Docke Compose.
•pa se: Gene a una con igu ación de Docke Compose basada en el escena io p opo cionado.
•ge _dependencies: Ob iene las dependencias pa a los nodos maes os.
•is_mas e : Ve i ica si un nodo es un nodo maes o.
4.4 Co e 21
•is_sla e: Ve i ica si un nodo es un nodo escla o.
Ejemplo de Uso
A con inuación, se mues a un ejemplo de cómo u iliza la clase Docke ComposeGene a o pa a gene a
un a chi o docke -compose.yml a pa i de una con igu ación de escena io:
Código 4.8 Ejemplo de uso de docke -compose-gene a o .py.
1i __name__ == "__main__":
2scena io = {
3"p o ocol":"modbus",
4"ip_ne wo k":"172.28.0.0/16",
5"nodes": [
6{" ole":"mas e ","ip":"172.28.0.2"},
7{" ole":"sla e","ip":"172.28.0.3"},
8{" ole":"sla e","ip":"172.28.0.4"},
9],
10 }
11 gene a o = Docke ComposeGene a o (
12 "modbus","docke -compose.yml","/ mp/ICSCommEmula o "
13 )
14 gene a o .pa se(scena io)
Es e ejemplo c ea una ins ancia de Docke ComposeGene a o con el p o ocolo "modbus", la u a del
a chi o docke -compose.yml y la u a de con igu ación / mp/ICSCommEmula o . Luego, llama al mé odo
pa se con la con igu ación del escena io pa a gene a el a chi o de Docke Compose.
4.4.4 Módulo scena io_con ig_gene a o .py
En el diseño se iden i icó la necesidad de ges iona los a chi os de con igu ación de los nodos maes os y
escla os. Pa a ello, se ha desa ollado el módulo scena io-con ig-gene a o .py, que se enca ga de
gene a y alida es os a chi os.
T as es udia las posibilidades, se conside ó que se debía usa una es uc u a de di ec o ios bajo / mp/ICS-
CommEmula o pa a almacena los a chi os de con igu ación. En es e di ec o io se c ean subdi ec o ios pa a
cada nodo, donde se almacenan los a chi os de con igu ación especí icos.
Cuando se mencionó la igu a 4.1, se dijo que al aba una pa e e e en e a los iche os de con igu ación
especí icos de cada con enedo . Es a sección se enca ga de explica cómo se han implemen ado. Pa a ello
en la igu a 4.2 se especi ica la es uc u a de di ec o ios gene ada po el módulo.
Figu a 4.2 Es uc u a de di ec o ios de / mp/ICSCommEmula o .
22 Capí ulo 4. Diseño e Implemen ación de la Solución
Pa a el uso de es e módulo, se ha desa ollado la clase Scena ioCon igGene a o , que se enca ga de
gene a los a chi os de con igu ación pa a los nodos maes os y escla os. A con inuación, se de allan los
componen es y uncionalidades cla e del módulo:
Clase Scena ioCon igGene a o
La clase Scena ioCon igGene a o es la enca gada de gene a los a chi os de con igu ación pa a los
nodos maes os y escla os. Los a ibu os p incipales de la clase incluyen:
•scena io (dic ): Dicciona io que con iene la con igu ación del escena io.
•con ig_pa h (s ): Ru a a los a chi os de con igu ación.
Mé odos de la Clase
•__ini __: Inicializa la clase con el escena io y la u a de con igu ación.
•_con e _ o_in : Mé odo es á ico pa a con e i una cadena a un en e o si es posible.
•_c a _mas e : C ea a chi os de con igu ación pa a los nodos maes os.
•_c a _sla e: C ea a chi os de con igu ación pa a los nodos escla os.
•clean: Limpia la u a de con igu ación eliminando los a chi os exis en es.
•gene a e: Gene a los a chi os de con igu ación pa a el escena io.
Ejemplo de Uso
A con inuación, se mues a un ejemplo de cómo u iliza la clase Scena ioCon igGene a o pa a gene a
a chi os de con igu ación a pa i de una con igu ación de escena io:
Código 4.9 Ejemplo de uso de scena io-con ig-gene a o .py.
1scena io = {
2"nodes": [
3{" ole":"mas e ","messages": [...]},
4{" ole":"sla e", ...}
5]
6}
7gene a o = Scena ioCon igGene a o (scena io, "/ mp/ICSCommEmula o ")
8gene a o .gene a e()
Es e ejemplo c ea una ins ancia de Scena ioCon igGene a o con la con igu ación del escena io y la
u a de con igu ación. Luego, llama al mé odo gene a e pa a gene a los a chi os de con igu ación.
Pa a e i a epe ición en la documen ación, el o ma o que ha de ene cada nodo es un dicciona io con
el o ma o expues o de cada a chi o de con igu ación. En el caso del nodo maes o, código 4.6, y en el del
escla o, código 4.7.
4.4.5 Módulo unne .py
Aunque no se haya dicho de o ma explíci a, se necesi a un sc ip que si a de in e az pa a la ejecución de
Docke Compose y Tcpdump de o ma coo dinada. De es a necesidad nace el módulo unne .py.
Es e módulo usa una clase single on, Scena ioRunne , la cual solo pe mi e que haya un escena io co-
iendo a la ez. Se ha decidido que solo se pueda ejecu a un escena io a la ez pa a e i a p oblemas de
concu encia.
Es e módulo iene es unciones que ac úan de in e az pa a el es o de módulos.
s a
En es a unción asegu a que solo se ejecu a á el escena io p opues o si no se es á ejecu ando ningún escena-
io. Recibe como pa áme o la u a hacia el iche o docke compose, el iempo de simulación y la u a hacia
el iche o de salida.
Con es os pa áme os con igu a Scena ioRunne y lo co e. Pa a no bloquea el hilo que llama a es a
unción, se lanza o o hilo donde co e á la emulación.
Pa a lanza el escena io se ealizan las siguien es acciones:
4.5 Backend 23
1. Asegu a segu idad de hilos con un candado.
2. Ma ca que se es á co iendo un escena io.
3. Lanza Docke Compose.
4. Lanza Tcpdump en la in e az de Docke .
5. Espe a a que la emulación e mine.
6. Pa a Docke Compose.
7. Pa a Tcpdump.
Debe añadi se que Docke Compose bo a los con enedo es que c ea pe o no bo a la ed. Es po eso que
se ha añadido una unción que limpia la ed c eada.
Po úl imo, Docke cu sa á ico adicional po las edes, como el p o ocolo Mul icas DNS (mDNS) o
Simple Se ice Disco e y P o ocol (SSDP). mDNS es un se icio diseñado pa a lle a a cabo la esolución
de nomb es en edes más pequeñas[15]. SSDP es un p o ocolo que si e pa a la búsqueda de disposi i os
Uni e sal Plug and Play (UPnP) en una ed. U iliza UDP en unicas o mul icas en el pue o 1900 pa a anun-
cia los se icios de un disposi i o[16]. Dado que nues o obje i o es el ealismo de la ed, se ha con igu ado
Tcpdump pa a que no escuche esos p o ocolos.
s op
Es a unción solo se llama si el usua io pide desde la in e az g á ica de ene el escena io. La unción ue za
la de ención del escena io que se es é ejecu ando, po lo que no ecibe pa áme os. El p oceso es p ime o
pa a Docke Compose y luego Tcpdump.
s a us
En la con igu ación de Tcpdump se espec ició que se gua dase el á ico en el iche o de salida pe iódica-
men e. De es e modo se puede de ol e in o mación ele an e pa a sabe el es ado de la emulación como el
amaño del pcap.
En es e caso se han conside ado necesa ios los campos:
•Tiempo anscu ido.
•Tiempo o al de emulación.
•Tamaño ac ual del pcap.
•Si el escena io es á co iendo.
4.5 Backend
El Backend es el componen e que coo dina la is a con el modelo, es deci , la in e az g á ica con el núcleo
de la uncionalidad. Dado que es e ue el segundo componen e en se codi icado, se man u o el espí i u de
modula idad an e io men e expues o en el co e.
4.5.1 Módulo web.py
Es e módulo es el enca gado de c ea la aplicación web que o ece sus se icios an o de REST API como
de in e az g á ica. Pa a ello, como se ha mencionado an e io men e, se ha usado Flask, un amewo k
minimalis a de Py hon.
An e io men e ya se nomb a on los dis in os endpoin s, aquí se explica á en de alle cómo se han imple-
men ado.
Lo p ime o es en ende la es uc u a de di ec o ios que gene a Flask. Como se puede e en la igu a 4.1,
hay una ca pe a web en la aíz del p oyec o, donde se encuen an los iche os de la aplicación web.
La subca pe a empla es es una ca pe a ese ada po el amewo k pa a coloca los iche os Hype ex
Ma kup Language (HTML). Es o es así po que Flask pe mi e la ende ización del HTML con código Py hon
den o1, simila a Ja aSe e Pages (JSP), is o a lo la go de la ca e a.
También con amos con la subca pe a s a ic, donde se encuen an el código Ja aSc ip , el CSS y las imá-
genes u ilizadas. Como se ha mencionado an e io men e, se han usado las lib e ías Cy oscape.js yipadd .js
1h ps://www.geeks o geeks.o g/ lask- ende ing- empla es/
24 Capí ulo 4. Diseño e Implemen ación de la Solución
en el F on end. Al se a chi os de Ja aSc ip que ca ga el usua io jun o al HTML, pa a pe mi i que la apli-
cación pueda co e sin necesidad de acceso a in e ne , se han desca gado y si uado en la ca pe a asignada
pa a Ja aSc ip .
A con inuación se desc iben b e emen e los endpoin s desa ollados po es e p oyec o, ya is os en la
abla 4.1.
GET /api/ne wo ks/
•Desc ipción: De uel e una lis a de edes disponibles en el sis ema.
•Pa áme os: Ninguno.
•Respues a:
–200 OK: Lis a de edes. Ejemplo:
[
"demo",
"p ueba"
]
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: Es e endpoin usa el módulo scena io_handle .py pa a sabe odos los escena ios
que exis en.
POST /api/ne wo ks/
•Desc ipción: C ea un escena io con los pa áme os especi icados.
•Pa áme os:
–p ojec Name: Nomb e del p oyec o.
–ipSub ange: Rango IP de los nodos en el p oyec o.
–p o ocol: P o ocolo que end á el escena io.
–mas e Nodes: Núme o de maes os inicialmen e en el escena io.
–sla eNodes: Núme o de escla os inicialmen e en el escena io.
•Respues a:
–200 OK: Escena io c eado con éxi o.
–400 Bad Reques : El escena io iene pa áme os in álidos.
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: El escena io comp ueba secuencialmen e si:
–El escena io no exis e.
–El alo de maes os o escla os es co ec o.
–Es án odos los pa áme os en la pe ición.
–El ango IP es álido.
Una ez comp obado, c ea el escena io usando el módulo cy oscape_adap e .py pa a la c eación de
la ep esen ación de la ed y el módulo scena io_handle .py pa a gua da lo.
GET /api/ne wo ks/name
•Desc ipción: De uel e la ep esen ación JSON del p oyec o.
•Pa áme os:
–name: Nomb e del p oyec o.
•Respues a:
–200 OK: Escena io en ep esen ación JSON de Cy oscape.js.
–404 No Found: No se ha encon ado el escena io.
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: Es e endpoin consul a la base de da os pa a ob ene odas las edes disponibles. Si
se p opo ciona un pa áme o de il o, las edes se il a án en consecuencia.
4.5 Backend 25
PUT /api/ne wo ks/name
•Desc ipción: Ac ualiza la con igu ación de un escena io.
•Pa áme os: El escena io en la ep esen ación JSON que es capaz de gene a y es au a Cy oscape.js.
•Respues a:
–200 OK: Escena io ac ualizado con éxi o.
–400 Bad Reques : Escena io in álido.
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: Se alida el escena io usando el módulo cy oscape_adap e .py y pos e io men e se
gua da el escena io usando el módulo scena io_handle .py.
GET /api/ un/
•Desc ipción: Ob iene las mé icas de la ejecución ac ual.
•Pa áme os: Ninguno
•Respues a:
–200 OK: Mé icas de la ejecución. Ejemplo:
[
"elapsed_seconds": 2,
" o al_seconds": 15,
"pcap_size": 3093, # by es
" unning": ue,
]
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: Llama a la api o ecida po unne .py y de uel e sus esul ados.
POST /api/ un/name
•Desc ipción: A anca el escena io especi icado.
•Pa áme os:
–name: Nomb e del p oyec o.
•Respues a:
–200 OK: In o mación de la ejecucición:
[
"message": "Scena io unning",
"simula ion_ ime": simula ion_ ime,
" ile_pa h": ile_pa h,
]
–404 No Found: Escena io no encon ado.
–500 In e nal Se e E o : E o inespe ado del se ido .
•Funcionamien o: Usando los módulos docke _compose_gene a o .py,scena io_con ig_gene a o .py
y unne .py, se c ea el escena io, se gene an los iche os de con igu ación y se a anca la emulación.
DELETE /api/ un/
•Desc ipción: Fue za la de ención del escena io ac ual.
•Pa áme os: Ninguno.
•Respues a:
–200 OK: OK.
–500 In e nal Se e E o : E o inespe ado en el se ido .
•Funcionamien o: Usa la api de unne .py pa a de ene los ecu sos u ilizados po la emulación, como
Docke Compose y Tcpdump.
GET /index.h ml
•Desc ipción: De uel e la página p incipal.
32 Capí ulo 4. Diseño e Implemen ación de la Solución
En caso de e o no se le pe mi e al usua io con inua , ya que da ía luga a una con igu ación in álida. En
caso de que sean ale as se le pe mi e con inua .
4.6.5 Ejecución
Pa a comenza la ejecución se le pide al usua io que in oduzca el iempo que du a á la emulación. Es o
es así po que al ene la posibilidad de manda mensajes pe iódicos, no se puede de e mina un iempo de
emulación.
Una ez comenzada la ejecución el sc ip le pide in o mación ace ca de la ejecución al se ido y con ello
se mues a en una pes aña la siguien e in o mación:
•Tiempo ac ual de emulación.
•Tiempo o al de emulación.
•Tamaño del pcap en by es.
4.7 Casos de Uso
Dadas las unciones p incipales, enemos los siguien es casos de uso:
•C eación de un nue o escena io.
•Ca ga de un escena io p e iamen e gua dado.
•Gua dado del escena io ca gado.
•Emulación del escena io ca gado.
•De ención de la emulación ac ual.
4.7.1 C eación de un Nue o Escena io
La c eación de un escena io es una uncionalidad esencial en el p oyec o. El usua io comple a un o mula io
con los campos desc i os en la abla 4.9. Al con i ma , el escena io se gua da el icheo y se edi ige a la
págin web del escena io au omá icamen e. La lógica del p oceso es á ep esen ada en el diag ama de la
igu a 4.5.
Tabla 4.9 Campos eque idos pa a la c eación de un escena io.
Campo Tipo Desc ipción
Nomb e del p oyec o Cadena de ex o Iden i icado único del escena io
Sub ed IP Fo ma o IP CIDR Rango de di ecciones IP pa a el escena io
P o ocolo Cadena de ex o Campo ese ado pa a compa ibilidad u u a
Núme o de maes os Núme o en e o Can idad inicial de nodos maes os
Núme o de escla os Núme o en e o Can idad inicial de nodos escla os
4.7.2 Ca ga de un Escena io
Es a uncionalidad pe mi e al usua io ca ga un escena io p e iamen e gua dado desde la in e az g á ica.
Al selecciona la opción co espondien e, se mues a una lis a de escena ios disponibles. T as elegi uno,
es e se ca ga au omá icamen e. El diag ama de la igu a 4.6 de alla el p oceso.
4.7.3 Gua dado de un Escena io Ca gado
Una ez ca gado un escena io, el usua io puede modi ica lo y gua da lo. La in o mación del escena io (no-
dos, con igu aciones, posiciones, nomb es, e c.) se almacena en a chi os cuyo o ma o depende de las li-
b e ías u ilizadas en el on end. Aunque el gua dado es á in luenciado po es as he amien as, la lógica
subyacen e es independien e, como se mues a en la igu a 4.7.
4.7 Casos de Uso 33
Figu a 4.5 Diag ama de secuencia pa a la c eación de un escena io.
Figu a 4.6 Diag ama de secuencia pa a la ca ga de un escena io.
4.7.4 Emulación del Escena io Ca gado
Una ez gua dado el escena io, el usua io puede inicia su emulación, pa a lo que especi ica la du ación del
p oceso. La lógica de es a uncionalidad se di ide en dos e apas, ilus adas en las igu as 4.8 y 4.9.
4.7.5 De ención de la Emulación
Po úl imo, un escena io en ejecución se puede de ene en cualquie momen o. La igu a 4.10 mues a el
p oceso de de ención de la emulación.
34 Capí ulo 4. Diseño e Implemen ación de la Solución
Figu a 4.7 Diag ama de secuencia pa a el gua dado de un escena io.
Figu a 4.8 Diag ama de secuencia pa a la ejecución de un escena io.
4.7 Casos de Uso 35
Figu a 4.9 Diag ama de secuencia pa a la gene ación de a chi os necesa ios pa a la emulación.
Figu a 4.10 Diag ama de secuencia pa a la de ención de la emulación.
5 Pues a en Ejecución y Ejemplos de Uso
5.1 Ins alación
5.1.1 Ob ención del código uen e
El p ime paso es ob ene el código uen e, que aunque puede se ob enido de múl iples o mas, la más
sencilla es desca ga lo desde el eposi o io de Gi Hub:
cu l -L0
h ps://api.gi hub.com/ epos/Nelni o ian/icscommemula o / a ball
-o icscommemula o . a .gz
Descomp imimos el a chi o desca gado:
a -x z icscommemula o . a .gz
5.1.2 Ins alación de dependencias
Pa a ins ala las dependencias necesa ias se ecomienda ins ala median e el sc ip ins all.sh, el cual ins ala:
•La úl ima e sión de Docke y Docke Compose.
•Tcpdump.
•Py hon3.
•Dependencias de lib e ías de Py hon, que se incluyen en el a chi o equi emen s. x .
5.1.3 Ejecución del p oyec o
Pa a ejecu a el p oyec o, se debe ejecu a el sc ip de py hon main.py. Pa a ello, ejecu amos en la e minal:
py hon3 main.py
Es o nos ab i á un se ido h p en 127.0.0.1:8080, al que pod emos accede desde un na egado web
en ando en la di ección h p://127.0.0.1:8080.
5.2 P uebas
Las p uebas son esenciales en cualquie p oyec o po que ga an izan la uncionalidad y la calidad del sis ema
desa ollado. Al p oba el código, se minimizan e o es que pod ían comp ome e el endimien o o la expe-
iencia del usua io, especialmen e en p oyec os con múl iples componen es in e dependien es. Además, las
p uebas son undamen ales pa a e i ica que los equisi os iniciales se cumplan y que los cambios u u os
no in oduzcan p oblemas inespe ados, asegu ando la sos enibilidad del p oyec o a la go plazo.
En algunos casos, ealiza p uebas exhaus i as en odos los componen es puede se innecesa io y poco
e icien e, especialmen e si el p oyec o iene ecu sos limi ados o plazos ajus ados. Focaliza las p uebas
únicamen e en los componen es más complejos o c í icos del sis ema puede se su icien e pa a ga an iza la
37
38 Capí ulo 5. Pues a en Ejecución y Ejemplos de Uso
es abilidad gene al. Al cen a se en es os pun os, se de ec an los posibles allos de mayo impac o sin in e i
un iempo excesi o en pa es que son más simples o menos p opensas a e o es. Es e en oque balancea el
cos o y el bene icio, asegu ando una alidación adecuada del sis ema sin comp ome e la iabilidad del
p oyec o.
Pues o que el diseño del p oyec o se hizo con la idea de se modula , du an e una ejecución del código
p incipal es ácilmen e iden i icable dónde es á el allo. Es o ha educido los equisi os de p uebas uni a ias,
ya que la modula idad del código pe mi e una depu ación más sencilla.
5.2.1 P uebas uni a ias
En el p oyec o se ha iden i icado como necesa io es ea los componen es sob e los que se iene menos
con ol y pod ían di icul a la depu ación. En es e caso se han ealizado p uebas uni a ias sob e el gene ado
de iche os de con igu ación de Docke Compose y la comunicación en e un maes o y un escla o.
Es as p uebas es án alojadas en el di ec o io es s/ y se ejecu an con el comando py hon3 -m py es .
Docke Compose Gene a o
En es a p ueba uni a ia se usa el gene ado de Docke Composes pa a c ea un a chi o de con igu ación y
añadi le nodos de o ma con olada.
Pos e io men e, se comp ueba que en el iche o es án los nodos gene ados co ec amen e.
Finalmen e, se le pide a Docke Compose que use su alidado pa a e mina la p ueba.
Comunicación Maes o - Escla o
En es a p ueba uni a ia se lanza el maes o esc i o en p o ocols/modbus/mas e /mas e .py y el escla o de
p o ocols/modbus/sla e/sla e.py.
Pos e io men e se comp ueba que el escla o inicia y esponde co ec amen e a los mensajes.
Figu a 5.1 Ejecución exi osa de los es s uni a ios.
5.3 Ejemplos de uso
En es e apa ado p esen a la in e az g á ica así como algunos esul ados in e esan es. P e iamen e hab á
sido necesa io segui los pasos desc i os en sección 5.1.
Pa a acompaña la demos ación se ha c eado un ídeo donde se p epa a el mismo escena io. El ídeo se
puede encon a en h ps://d i e.google.com/ ile/d/1VYJP0eNjIukOdCXd UinA2j5hwsCZ j4/.
5.3.1 C eación de Escena io
Pa a c ea un escena io nos di igimos a h p://127.0.0.1:8080 y pulsamos en el bo ón de c ea escena io.
Como ya se ha is o en 4.6.1, nos encon amos con un o mula io en el que end emos que especi ica
algunos da os pa a la c eación del escena io.
Pa a el escena io de p ueba amos a c ea dos escla os y dos maes os en la sub ed 192.168.45.0/24.
Llama emos al escena io demo.
De es a o ma nos queda el o mula io como se mues a en 5.2.
5.3 Ejemplos de uso 39
Figu a 5.2 Fo mula io de c eación de escena io.
5.3.2 Ca ga de Escena io
T as c ea el escena io en el apa ado an e io se nos edi igió au omá icamen e hacia h p://127.0.0.1:8080/ne wo k/demo.
Si acciden almen e hubié amos ce ado la pes aña del na egado y quisié amos ol e a ab i la, nos di igi-
íamos a h p://127.0.0.1:8080, y es a ez pulsa íamos en el bo ón de ca ga escena io.
De es a o ma nos salen odos los escena ios c eados y podemos selecciona el que que amos ca ga , como
se mues a en la igu a 5.3.
Figu a 5.3 Fo mula io de ca ga de escena io.
5.3.3 Pan alla de ed y u ilidades
En el momen o de o bien ca ga o bien c ea nues o escena io llamado demo, se edi ige au omá icamen e
a h p://127.0.0.1:8080/ne wo k/demo.
Aquí nos encon amos con múl iples elemen os ele an es, los cuales se desc iben en 4.6.2.
En la igu a 5.4 se mues an en azul las ins ucciones básicas pa a el uso de la aplicación. Además, en
e de se mues an los bo ones de zoom in y zoom ou . En ama illo se mues an los bo ones de ejecu a y
gua da . Po úl imo, nos encon amos con un lienzo con nodos.
La uncionalidad del lienzo se i á de allando en las siguien es secciones.
40 Capí ulo 5. Pues a en Ejecución y Ejemplos de Uso
Figu a 5.4 Pan alla de ed.
5.3.4 Con igu ación de Maes os
Todos los nodos ienen una con igu ación común, la cual se compone de un nomb e, comen a io, ol, ip y
mac, al y como se io en 4.6.2. Los nodos se gua dan su con igu ación au omá icamen e al ce a la pes aña.
Los nodos ienen p econ igu ados con un nomb e y una ip, pe o se pueden modi ica a a és de la in e az
g á ica.
En es e caso amos a modi ica los maes os pa a que uno se llame "maes o_insis en e" y o o "maes o_-
elajado". Los nomb es no a ec an a la emulación y se pueden epe i .
Además, pa a hace más in e esan e la con igu ación de los maes os amos a cambia les la di ección IP
pa a que el maes o insis en e es é en 192.168.45.10 y el elajado en 192.168.45.11.
Pa a ilus a las i udes del p oyec o, se cambia á la MAC del maes o insis en e a e4:a8:d :d1:11:0a y
la del maes o elajado a e4:a8:d :d1:11:0b.
Figu a 5.5 Con igu ación de los maes os.
5.3.5 Con igu ación de Escla os
Los escla os ienen más campos de con igu ación que los maes os po que es amos an e un nodo más com-
plejo.
En es e ejemplo de uso nomb amos a los escla os escla o1 yescla o2 y cambiamos sus espec i as IPs a
192.168.45.100 y192.168.45.101, así como sus espec i as MACs a e4:a8:d :d1:11:1a ye4:a8:d :d1:11:1b.
Yendo a la con igu ación especí ica del p o ocolo, amos a deja el pue o 502 pa a acili a la decodi i-
cación del p o ocolo de Wi esha k.
En cuan o al ID de escla o, amos a asigna le a cada escla o su ID co espondien e, 1y2.
5.3 Ejemplos de uso 41
Regis os
Como ya se io en 2.1, hay cua o ipo de egis os. Podemos de ini los egis os u ilizados de dos o mas
dis in as: dispe sa o secuencial. Dado que el modo de uso más habi ual es el sequencial, amos a usa es e.
Pa a es a demos ación amos a usa Holding Regis e s yCoils. Ambos escla os an a de ini algunos
egis os de ambos ipos.
En cuan o al escla o1, pa a los Holding Regis e s amos a de ini los p ime os es egis os (0-2) con los
alo es 0, 1, 2. Pa a los Coils amos a de ini los p ime os dos egis os (0-1) con los alo es 0, 1.
En cuan o al escla o2, pa a los Holding Regis e s amos a de ini únicamen e el p ime egis o (0) con
el alo 3. Pa a los Coils amos a de ini los p ime os es egis os (0-2) con los alo es 1, 0, 1.
De es e modo las con igu aciones quedan como se mues a en las igu as 5.6 y 5.7.
Figu a 5.6 Con igu ación de escla o1.
Figu a 5.7 Con igu ación de escla o2.
Iden idad
Como ya se io en 4.6.2, el úl imo apa ado de con igu ación de los escla os es la iden idad. En es e apa ado
se con igu a el modelo, la e sión y el ab ican e del escla o.
Pa a hace una demos ación comple a de odas las capacidades del so wa e, se le a a con igu a al
escla o2 la iden idad. Se le con igu a á con los siguien es da os:
•Nomb e del Vendedo : TechnoFan asy Inc.
•Código de P oduc o: TF98765
•Re isión: 2.5
48 Capí ulo 6. Conclusiones
Modelo a lo la go de es a memo ia. En segundo luga , ha quedado mani ies o en la demos ación que la
in e az es in ui i a y abs ae al usua io de la ecnología subyacen e.
Además, g acias a la ase de diseño se han podido iden i ica necesidades uncionales a iempo, pe -
mi iendo inclui las con acilidad adap ando la a qui ec u a. Po o o lado, se ha podido comp oba que la
a qui ec u a p opues a es escalable y lexible, pe mi iendo así la inclusión de nue as uncionalidades sin
necesidad de ehace los módulos.
A lo la go del p oyec o se han codi icado 3037 líneas de código en iche os .py y .js. Es a suma no incluye
las lib e ías usadas ni a chi os de con igu ación, como los di e sos a chi os YAML, JSON, CSV o los
a chi os de con igu ación de Docke .
Po úl imo, se han c eado imágenes de Docke pa a es e escena io, educiendo su peso en disco y en
memo ia con espec o a las disponibles públicamen e en Docke Hub.
7 Limi aciones y Líneas Fu u as
I belie e we’ e eached he end o ou jou ney. All ha emains
is o collapse he innume able possibili ies be o e us. A e you
eady o lea n wha comes nex ?
Solanum, Ou e Wilds (Mobius Digi al, 2019)
El p oyec o comenzó con una se ie de obje i os que se han alcanzado con éxi o, ma cando un sólido
pun o de pa ida. Aunque algunas uncionalidades iniciales queda on ue a del alcance debido al iempo
disponible, es o ab e opo unidades de mejo a in e esan es. A con inuación, se p esen an algunas líneas
u u as que pod ían po encia aún más el p oyec o.
7.1 Inc emen a can idad de p o ocolos
La p ime a limi ación iene dada po que es e abajo solo sopo a el p o ocolo Modbus TCP, lo que es inge
su aplicabilidad a o os p o ocolos indus iales como DNP3 o IEC 104. Aunque el código es pe sonalizable,
se puede mejo a la au oma ización de los a aques a Modbus.
La con eniencia de amplia el núme o de p o ocolos ya se ha con emplado en es e abajo du an e la ase de
diseño, lo que acili a á la u u a implemen ación. La a qui ec u a se diseñó pa a que se pudiese implemen a
cualquie o o p o ocolo únicamen e buscando la lib e ía y haciendo cambios le es a la in e az g á ica. Las
lib e ías que se p oponen de los p o ocolos mencionados son pyiec61850 ydnp3-py hon.
7.2 Re oalimen ación du an e la ejecución
Uno de los p incipales mo i os po los cuales se escogió la ep esen ación en g a o ue pa a pode ep esen a
el á ico gene ado po la ed en iempo eal. Ac ualmen e no es á implemen ado, pe o es u o p esen e la
posibilidad de añadi lo has a las úl imas ases del p oyec o.
Es e pun o ue desca ado po al a de iempo. La lib e ía u ilizada pa a el on end pe mi e la congela-
ción de los nodos, e i ando la in e acción con el usua io. En es e es ado, las pe iciones que se ealizan al
backend pa a ac ualiza sob e el es ado de la emulación se pueden hace con mayo ecuencia y que lle en
in o mación de los mensajes mandados po cada nodo.
Desde el co e, se end ía que añadi un módulo que ecogiese los mensajes mandados po cada nodo.
Una de las o mas más sencillas se ía inspeccionando el socke de Docke , aunque no se ha es udiado con la
su icien e p o undidad como pa a es ablece la como la mejo solución.
7.3 Velocidad de enlace no in ini a
O a limi ación es que el enlace de da os no iene condiciones ealis as (p.ej., e a do cons an e o ce o), lo
que puede a ec a a la ep esen a i idad de los escena ios simulados en e a edes eales con la encias y
49
50 Capí ulo 7. Limi aciones y Líneas Fu u as
pé didas de paque es. Una posible línea de abajo es añadi una opción pa a limi a la elocidad de enlace
en e los nodos.
7.4 Dependencia de Docke
Desde el pun o de is a de la a qui ec u a, el sis ema depende de Docke pa a la i ualización de los dis-
posi i os, lo que puede gene a sob eca ga en sis emas con ecu sos limi ados. Es o pod ía llega a se una
limi ación pe o hay que ene en cuen a que en el abajo ya se ha in en ado palia es a limi ación educiendo
el amaño de las imágenes, aunque como u u a línea pod ía p o undiza se más en es a línea.
Índice de Figu as
2.1 Campos de la cabece a del p o ocolo Modbus 3
2.2 A qui ec u a de Docke 6
2.3 Aplicación del pa ón Modelo-Vis a-Con olado 7
4.1 Diag ama de componen es: Backend y Co e 16
4.2 Es uc u a de di ec o ios de / mp/ICSCommEmula o 21
4.3 Diag ama de Secuencia pa a C ea un Escena io 29
4.4 Diag ama de Secuencia pa a Ca ga un Escena io 29
4.5 Diag ama de secuencia pa a la c eación de un escena io 33
4.6 Diag ama de secuencia pa a la ca ga de un escena io 33
4.7 Diag ama de secuencia pa a el gua dado de un escena io 34
4.8 Diag ama de secuencia pa a la ejecución de un escena io 34
4.9 Diag ama de secuencia pa a la gene ación de a chi os necesa ios pa a la emulación 35
4.10 Diag ama de secuencia pa a la de ención de la emulación 35
5.1 Ejecución exi osa de los es s uni a ios 38
5.2 Fo mula io de c eación de escena io 39
5.3 Fo mula io de ca ga de escena io 39
5.4 Pan alla de ed 40
5.5 Con igu ación de los maes os 40
5.6 Con igu ación de escla o1 41
5.7 Con igu ación de escla o2 41
5.8 Con igu ación de mensajes del maes o insis en e al escla o1 42
5.9 Con igu ación de mensajes del maes o insis en e al escla o2 42
5.10 Con igu ación de mensajes del maes o elajado al escla o2 42
5.11 Mensaje de éxi o al gua da el escena io 43
5.12 Pa áme os de ejecución de la emulación 43
5.13 P og eso de la emulación 44
5.14 Resul ado de la emulación 44
5.15 T á ico en Wi esha k 45
51
Índice de Tablas
2.1 Códigos de unción Modbus 4
2.2 Tipos de Regis os en Modbus 4
2.3 Comandos comunes pa a la ges ión de imágenes en Docke 5
2.4 Ins ucciones comunes de Docke ile 5
2.5 Equi alencia en e ope aciones CRUD y mé odos HTTP 8
3.1 Compa a i a en e So wa e 12
4.1 Endpoin s de la REST API 14
4.2 Lib e ías Usadas en el P oyec o 15
4.3 He amien as Ex e nas Usadas en el P oyec o 15
4.4 Validaciones ealizadas pa a un escena io 26
4.5 Campos de c eación de un escena io 28
4.6 Campos de con igu ación de un nodo 30
4.7 Campos de con igu ación especí icos de un escla o 30
4.8 Validaciones ealizadas pa a los pa áme os de comunicación 31
4.9 Campos eque idos pa a la c eación de un escena io 32
5.1 Mensajes en iados espe ados 44
53
Índice de Códigos
2.1 Ejemplo básico docke -compose.yml 6
4.1 Ejemplo de ne wo k 16
4.2 Ejemplo de nodo maes o 17
4.3 Ejemplo de nodo escla o 17
4.4 Docke ile del maes o 18
4.5 Docke ile del escla o 19
4.6 Ejemplo de mas e .cs 19
4.7 Ejemplo de sla e.yaml 19
4.8 Ejemplo de uso de docke -compose-gene a o .py 21
4.9 Ejemplo de uso de scena io-con ig-gene a o .py 22
4.10 Ejemplo de con igu ación YAML 26
55
Bibliog a ía
[1] I. N. Fo ino, A. Ca cano, M. Mase a, and A. T om-Be a, “Design and implemen a-
ion o a secu e modbus p o ocol,” IFIP Ad ances in In o ma ion and Communica ion
Technology, 2009, ci ed by: 111; All Open Access, B onze Open Access. [Online]. A ai-
lable: h ps://www.scopus.com/inwa d/ eco d.u i?eid=2-s2.0-84891808534&doi=10.1007%2 978-3-
642-04798-5_6&pa ne ID=40&md5=ec190d7dad22b95152062417b0d9a9a7
[2] INCIBE. (2020) E olucionando a modbus segu o. [Online]. A ailable: h ps://www.incibe.es/incibe-
ce /blog/e olucionando-modbus-segu o
[3] Modbus O ganiza ion, Inc., MODBUS Applica ion P o ocol Speci ica ion V1.1b3, Ap . 2012.
[Online]. A ailable: h ps://www.modbus.o g/docs/Modbus_Applica ion_P o ocol_V1_1b3.pd
[4] S. Elec ic. (2020) P o ocolo modbus pa a in e up o es mas e pac n /nw. Schneide Elec ic. [On-
line]. A ailable: h ps://p oduc -help.schneide -elec ic.com/ED/ES_Powe /NT-NW_Modbus_IEC_
Guide/EDMS/DOCA0054EN/DOCA0054xx/Mas e _NS_Modbus_P o ocol/Mas e _NS_Modbus_
P o ocol-2.h m
[5] Wikipedia. (2009) Model- iew-con olle . [Online]. A ailable: h ps://en.wikipedia.o g/wiki/Model-
iew-con olle
[6] S. O. Blog, “Bes p ac ices o es api design,” 2020. [Online]. A ailable: h ps://s acko e low.blog/
2020/03/02/bes -p ac ices- o - es -api-design/
[7] M. Masse, REST API Design Rulebook. Sebas opol, CA: O’Reilly Media, 2011.
[8] I. McG ego , “The ela ionship be ween simula ion and emula ion,” in P oceedings o he Win e Si-
mula ion Con e ence, ol. 2, 2002, pp. 1683–1688 ol.2.
[9] Wikipedia. (2024) Packe gene a o s. [Online]. A ailable: h ps://en.wikipedia.o g/wiki/Packe _
gene a o
[10] D. An onioli and N. O. Tippenhaue , “Minicps: A oolki o secu i y esea ch on CPS ne wo ks,”
CoRR, ol. abs/1507.04860, 2015. [Online]. A ailable: h p://a xi .o g/abs/1507.04860
[11] C. Quei oz, A. Mahmood, and Z. Ta i, “Scadasim—a amewo k o building scada simula ions,” IEEE
T ansac ions on Sma G id, ol. 2, no. 4, pp. 589–597, 2011.
[12] A. Dehlaghi-Ghadim, A. Balado , M. H. Moghadam, H. Hansson, and M. Con i, “Icssim —
a amewo k o building indus ial con ol sys ems secu i y es beds,” Compu e s in Indus y,
ol. 148, p. 103906, 2023. [Online]. A ailable: h ps://www.sciencedi ec .com/science/a icle/pii/
S0166361523000568
[13] A. Candia and C. Cappo, “Tinyics: An indus ial con ol sys em simula o based on ns-3,” in 2024 43 d
In e na ional Con e ence o he Chilean Compu e Science Socie y (SCCC), 2024, pp. 1–8.
[14] D. D. Team. (2016) Docke ne wo king design philosophy. [Online]. A ailable: h ps://www.docke .
com/blog/docke -ne wo king-design-philosophy/
[15] IONOS. (2021) Mul icas dns: qué es y cómo unciona. [Online]. A ailable: h ps://www.ionos.es/
digi alguide/se ido es/know-how/mul icas -dns/
[16] Wikipedia. (2010) Simple se ice disco e y p o ocol (ssdp). [Online]. A ailable: h ps://es.wikipedia.
o g/wiki/SSDP
57