How to develop my own VLR Number Lookup system using SS7 protocol? - voip

I have been in a project which need to know the user last location from VLR(Visitor Location Register). I have seen many online SMS providers offer a special service called HLR Lookup. Some websites offer VLR lookup e.g txtnation. VLR lookup may be possible by using the flaw of a poor design choice of the Signaling System No. 7, the global network that powers your calls, in which all GSM operators tap to communicate with each other.
SS7 is really old, and nobody bothered to replace it as technology advanced in the GSM world. It is quite impossible to replace/disable/remove it now because everything is based on it.
MAP Signaling is an SS7 protocol that provides an application layer for the various nodes in GSM. Yate is a partial open source implementation of MAP.
But there is not any service for getting VLR response. So would you please advice me
How could I create my own VLR lookup system?
What type of resource I need to develop this system e.g server
Is it related to VOIP? Should I need to setup SIP server?
Thanks a lot in advance.

Firstly, I think that the service you have linked to is really just providing a HLR lookup rather than a VLR lookup from a quick look at their API - i.e. there does not seem to be anything returned by the API which a regular HLR lookup would return.
It would also be odd for a carrier to allow communication to a VLR directly from an entity outside their network - this is not really what the VLR were intended for.
To create a HLR lookup service, the most important thing you need is the access to some operators SS& network, or else to a service that will proxy SS7 requests and responses from you.
If you have this access then building on an opensoure SS7 gateway would seem a sensible starting point, for example a SIP-SS7 gateway as I think you suggest.

Related

Why is the application data of a packet is called a protocol?

I've been reading on packets a lot today. I was confused for sometime because smtp, http, or ftp, for example, are all called protocols. But that they also somehow utilize transport protocols like TCP. I couldn't locate them on the packet 4 layers. Until I just discovered they're simply part of the application layer.
I want to know what exactly these "protocols" offer. I'm guessing a specific format for the data which applications on the client side know how to handle? If so, does this mean that realistically, I might have to create my own "protocols" if I created an application with a unique functionality?
A protocol, in this case, is just a structured way of communicating between two or multiple parties.
If you write, for example, a PHP-App and offer an API, you created a protocol to interact with your program. It defines how others interact with it and what response they can expect while doing so. Your self-created protocol depends on others, like the HTTP and TCP.
I suggest watching following video of LiveOverflow, explaining exactly this:
https://www.youtube.com/watch?v=d-zn-wv4Di8&ab_channel=LiveOverflow
I want to know what exactly these "protocols" offer.
You can read the definition of each protocol, if you really want to

Guidance on assigning full phone numbers to voip servers for incoming calls

I set up my own asterisk voip server and i was able to make calls to my extension but how do i get it so I would have an actual phone number people from the outside can call in. lets say i want the phone number
555-1234 and if someone calls that number it gets routed to my voip server then i process it and etc..
I was presuming that this would work similarly like DNS where you go buy a number and then point it to your server with an A record. Then from there nginx processes the server request and provides appropriate web pages and so on.
Some information on this would be fantastic as I have no idea where to go for this kind of stuff and google hits isnt revealing a lot.
You need to get a DID (Direct Inward Dialing) from a VoIP provider. There are many ITSP providers up there that can provide DID and then send it to your Asterisk server (called SIP Trunking) and from there you can configure Asterisk to terminate the call on specific extension or IVR.
Also, DIDs are usually provided by tier 1 carrier (companies like Bell Canada, AT&T, Verizon etc). Again, DID (Direct Inward Dialing) is not something you can simply advertise from your Asterisk server unless of course you want to allow people to call you by IP. For example, 5551234#YourAsteriskIP will make sure extension ring. But users from a non sip devices (ie landline) cannot call your number.

Communication between RESTful API's on same server with NodeJS

I am building two sets of services on a website (all written in NodeJS on the server), both are using a RESTful approach. For the sake of modularity I decided to make both services separate entities. The first service deals with the products of the site and the second specifically deals with user related functions. So the first might have functions like getProducts, deleteProduct etc... The second would have functions like isLoggedIn, register, hasAccessTo etc... The product module will make several calls to the user module to make sure that the person making the calls has the privilege to do so.
Now the reason I separated them like this, was because in the near future I foresee a separate product range opening up, but will need to use the same user system as the first (even sharing the same database). The user system will use a database that spans the entire site and all subsequent products
My question is about communication between these projects and the users project. What is the most effective way of keeping the users module separate without suffering any significant speed hits. If the product API made a call to the user API on the same server (localhost), is there a signifcant cost to this, versus building the user API into each of the subsequent projects? Is there a better way to do this through interprocess communication maybe? Is simply having the users API run as its own service an effective solution?
If you have two nodes on same server (machine) then you have not bad performance in terms of network latency because both are on localhost.
Then, nodes will be communicating using a rest api, so on the underground, you will use node js sockets. You could use unix sockets instead of http sockets because are faster BUT are worst to debug, so I recommend you don't to that (but it's ok know alternatives).
And finally, your system looks like an "actor design pattern". At first glance this design patter is a little difficult to understand but you could have a look at this if you want more info about actor model pattern:
Actor model for NodeJS https://github.com/benlau/nactor
Actor model explanation http://en.wikipedia.org/wiki/Actor_model

How to handle sticky-sessions with Socket.io 1.0 when behind a firewall?

I am trying to setup a POC for myself using Nginx, Node.js and Socket.io 1.0 using clustering on Rackspace. I am under the assumption that I need to use clustering because I want this to be scalable across multiple servers if needed. I want each node to have their own instance and as of now I can't see any need for each of the instances to have to talk to each other for any reason. Again as of now, I believe I need to use clustering for simply the fact that I may have many clients connecting to this server and I want it to be able to grown and shrink accordingly. My end goal is to build a little POC similar to what is shown here: https://cloud.google.com/developers/articles/real-time-gaming-with-node-js-websocket-on-gcp
I just got what I believe to be a valid setup of the new Socket.io 1.0 established, but when connecting from different devices behind my router, they are all showing the same PID in my logging and I assume this is due to the required sticky-sessioning by Socket.io. I am not sure if this is the same as the worker-process that we used to get with clustering, but again I am still trying to get my head wrapped around all this.
First I want to know if using clustering and sticky-sessions is required, since only 1 PID is issued for the same external IP, is there anyway to have each computer treated as its own instance? I do not want to send back a response that updates everyone behind that IP.
My second question is this and it may be a stupid question but i'm asking anyway :) In reading about how to get the sticky-sessions working I kept seeing people stating to "use sticky-sessions, like by IP Address". The word "like" is what got me. I seemed to have found people referring to using sticky-sessions with IP and cookies. Can you do it by anything else, such as a username, issued token or anything? My concern is if someone is playing with this on a mobile device and they switch towers, the tower will issue a new IP so in-turn a new PID would get issued and essentially that players game lost. Am I understanding this right?
Please forgive me as I am new to Node.js but thought this would be a cool way to learn node.js and clustering in the cloud. Any info or direction that anyone can provide would be of great help. Many of the tuts all seem to broadcast events to everyone but i am looking for a scalable solution where each connection can be sent events individually most fo the time. I also need to solve for a number of people behind the same firewall being treated as separate connections when the server communicates to them. Again if there is any reading or tutorials that you feel may help me with socket.io 1.0 and what I am trying to do, please reply. Thanks!
In general since you are using websockets you don't need to worry about stickiness as long as the connection does not terminate. This communication is bi-directional and the http connection is kept alive. If the connection drops the client is essentially reconnecting and starting over. So yes if anyone's ip gets renewed you will now get a new server socket.
Refer to article using-multiple-nodes where it states the requirement for XHR/JSONP long polling clients.
I don;t believe nginx has capabilities of load balancing on things like MAC address etc as per nginx load-balancing techniques.
I am thinking that you may need a solid load balancer that can use MAC addresses, virtual port ID or some headers for routing.

USSD Gateway implementation

I am supposed to develop a USSD gateway for an operator so please help me with the following
-can I use asterisk for this purpose?
-can the asterisk system take alphanumeric characters as user input.
USSD is transported via SS7.
In order to build a USSD gateway you either need a SS7 protocol stack supporting the MAP protocol or a separate SS7 gateway (e.g. MAP-to-SOAP converter) for accessing the SS7 network. This is typically something you purchase from someone who knows what he does.
While it may be possible to (ab)use Asterisk for message routing, I would expect that you get faster results with some message gateway framework or by building an application on your own. Depends on what business logic you actually want to build on top of USSD.

Resources