Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 
Custom Alert Banner

F5 iRule to get data group address content values list

pstavr
Cirrus
Cirrus

Hi

I am following this article for creating a data group on F5, populated from Azure IPv4 addresses.

https://devcentral.f5.com/s/articles/Dynamic-IP-update-of-Azure-IP-Ranges-and-store-them-in-data-gro...

Eveyrthing works like a charm, and now I am trying to publish the content of that data group as an html web page, but I want the output to be formulated like:

13.8.1.0/24

13.9.0.0/16

18.5.0.0/16

etc.

So it has to be presented as a list with line breaks for each entry.

Right now I am using this iRule:

when HTTP_REQUEST {
   switch -glob [string tolower [HTTP::uri]] {
    "/azure.html" {
       # Retrieve the Azure datagroup contents, send it in a HTTP 200 response
	   HTTP::respond 200 content [class get azure_ipv4_dg] "Content-Type" "text/html"
    }
default {
            ## requested something else
            HTTP::respond 404 content "Oops! You've asked for something we don't have."
        }   
   }
}

The output though comes like this:

{102.133.0.0/18 {}} {102.133.112.0/28 {}} {102.133.120.0/21 {}} {102.133.128.0/18 {}} {102.133.192.0/19 {}} {102.133.224.0/20 {}} {102.133.240.0/25 {}} {102.133.240.128/26 {}} {102.133.248.0/21 {}} {102.133.64.0/19 {}} {102.133.96.0/20 {}} {102.37.0.0/20 {}} {102.37.128.0/19 {}} {102.37.16.0/21 {}} {102.37.160.0/21 {}} {102.37.192.0/18 {}} {102.37.24.0/23 {}} {102.37.26.0/27 {}} {102.37.26.32/27 {}} {102.37.32.0/19 {}}

Is there an easy way to formulate the data to be more like a list, with line breaks, and without the brackets?

Thank you in advance for any suggestions.

2 REPLIES 2

pstavr
Cirrus
Cirrus

I managed to remove the brackets by simply getting the values. iRule looks like this now:

when HTTP_REQUEST {
    HTTP::version 1.0
    HTTP::header remove Accept-Encoding
    switch -glob [string tolower [HTTP::uri]] {
    "/azure.html" {
       # Retrieve the Azure datagroup contents, send it in a HTTP 200 response
	   HTTP::respond 200 content [class names azure_ipv4_dg] "Content-Type" "text/html"
       }
    }
}

It now gives me something like this:

102.133.0.0/18 102.133.112.0/28 102.133.120.0/21 102.133.128.0/18 102.133.192.0/19 102.133.224.0/20 102.133.240.0/25 102.133.240.128/26 102.133.248.0/21 102.133.64.0/19 102.133.96.0/20 102.37.0.0/20 102.37.128.0/19 102.37.16.0/21 102.37.160.0/21 102.37.192.0/18 102.37.24.0/23 102.37.26.0/27 102.37.26.32/27 102.37.32.0/19 102.37.64.0/21 102.37.72.0/21 102.37.80.0/21 102.37.96.0/19

So the only thing I need is to replace space with line breaks. Any ideas?

pstavr
Cirrus
Cirrus

I am now using two v. servers. The front one uses a stream profile and this iRule:

when HTTP_REQUEST {
    HTTP::header remove Accept-Encoding
    STREAM::disable
    virtual vs_ipv4feed_client_http
    return
}
 
when HTTP_RESPONSE {
    set find " "
    set replace "</br>"
    STREAM::expression "@$find@$replace@"
    STREAM::enable
}

The backend v. server (vs_ipv4feed_client_http) uses the iRule I pasted in the previous post as well.

when HTTP_REQUEST {
	switch -glob [string tolower [HTTP::uri]] {
    "/azureipv4.txt" {
       # Retrieve the Azure datagroup contents, send it in a HTTP 200 response
	   HTTP::respond 200 content [class names azure_ipv4_dg] "Content-Type" "text/html"
       }
    }
}

The output looks like this now:

102.133.0.0/18

102.133.112.0/28

102.133.120.0/21

102.133.128.0/18

102.133.192.0/19

102.133.224.0/20

102.133.240.0/25

102.133.240.128/26

102.133.248.0/21

102.133.64.0/19

....

 

Which is what I wanted. However, if I look a the source code of this txt file within the browser, it looks like this:

102.133.0.0/18</br>102.133.112.0/28</br>102.133.120.0/21</br>102.133.128.0/18</br>102.133.192.0/19</br>102.133.224.0/20</br>102.133.240.0/25</br>102.133.240.128/26</br>102.133.248.0/21</br>102.133.64.0/19</br>102.133.96.0/20</br>102.37.0.0/20</br>102.37.128.0/19</br>.......

My problem is that the firewall that I need to feed this list within, expects a native txt file with line breaks, rather than an html based txt file which uses "</br>". Therefore, I am unable to feed those IPs into my firewall, unless I somehow present this txt file as a native txt.